парсинг HTML на [закрытом] iPhone

MySQL: У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с ... at line ...

Эта ошибка часто возникает из-за того, что вы забыли правильно удалить данные, переданные в MySQL-запрос .

Пример того, что не делать («Плохая идея»):

$query = "UPDATE `posts` SET my_text='{$_POST['text']}' WHERE id={$_GET['id']}";
mysqli_query($db, $query);

Этот код может быть включен в страницу с формой для отправки с URL-адресом например http://example.com/edit.php?id=10 (для редактирования сообщения n ° 10)

Что произойдет, если представленный текст содержит одинарные кавычки ? $query закончится:

$query = "UPDATE `posts` SET my_text='I'm a PHP newbie' WHERE id=10';

И когда этот запрос будет отправлен в MySQL, он будет жаловаться, что синтаксис неверен, потому что в середине есть отдельная одинарная кавычка.

Чтобы избежать таких ошибок, вы ДОЛЖНЫ всегда избегать данных перед использованием в запросе.

Экранирование данных перед использованием в SQL-запросе также очень важно, потому что если вы этого не сделаете, ваш скрипт будет быть открытым для инъекций SQL. SQL-инъекция может привести к изменению, потере или изменению записи, таблицы или всей базы данных. Это серьезная проблема безопасности!

Документация:

69
задан Charles Stewart 3 January 2010 в 06:49
поделиться

6 ответов

Похож libxml2.2, прибывает в SDK, и libxml/HTMLparser.h требования следующее:

Этот модуль реализует синтаксический анализатор непроверки HTML 4.0 с API, совместимым с синтаксического анализатора XML. Это должно быть в состоянии проанализировать HTML "реального мира", даже если сильно поврежденный с точки зрения спецификации.

, Который походит на то, в чем я нуждаюсь, таким образом, я, вероятно, собираюсь использовать это.

49
ответ дан Sophie Alpert 24 November 2019 в 13:39
поделиться

Это, вероятно, зависит от того, насколько грязный HTML и что Вы хотите извлечь. Но обычно Опрятный делает вполне хорошее задание. Это записано в C, и я предполагаю, что необходимо быть в состоянии создать и статически связать его для iPhone. Можно легко установить версию командной строки и протестировать результаты сначала.

5
ответ дан tcurdt 24 November 2019 в 13:39
поделиться

API Objective C Google GData повторно реализует NSXMLElement и другие связанные классы, которые Apple удалила из iPhone SDK. Можно найти его здесь http://code.google.com/p/gdata-objectivec-client/ . Я использовал его для имеющего дело, обмениваясь сообщениями через Бессмысленные данные. Конечно, если Ваш HTML уродлив (пропускающий закрывающие тэги), это не могло бы помочь многому.

3
ответ дан dnolen 24 November 2019 в 13:39
поделиться

Возможно, вы захотите проверить ElementParser. Он обеспечивает "достаточно" разбор HTML и XML. Хорошие интерфейсы делают обход документов XML / HTML очень простым. http://touchtank.wordpress.com/

5
ответ дан 24 November 2019 в 13:39
поделиться

Я обнаружил, что использование hpple весьма полезно для анализа запутанного HTML. Проект Hpple - это оболочка Objective-C в библиотеке XPathQuery для синтаксического анализа HTML. С его помощью вы можете отправить запрос XPath и получить результат.

Требования :

-Добавить libxml2 в ваш проект

  1. Меню Проект-> Изменить настройки проекта
  2. Поиск для настройки «Поиск по заголовку» Пути "
  3. Добавить новый путь поиска" $ {SDKROOT} / usr / include / libxml2 "
  4. Включить рекурсивную опцию

-Добавить библиотеку libxml2 в ваш проект

  1. Меню Проект-> Изменить настройки проекта
  2. Найдите параметр «Другие флаги компоновщика»
  3. Добавьте новый флаг поиска «-lxml2»

-From hpple получите следующие файлы исходного кода и добавьте их в свой проект:

  1. TFpple.h
  2. TFpple.m
  3. TFppleElement. h
  4. TFppleElement.m
  5. XPathQuery.h
  6. XPathQuery.m

-Пройдитесь по w3school XPath Tutorial , чтобы освоиться с языком XPath.

Пример кода

#import "TFHpple.h"

NSData *data = [[NSData alloc] initWithContentsOfFile:@"example.html"];

// Create parser
xpathParser = [[TFHpple alloc] initWithHTMLData:data];

//Get all the cells of the 2nd row of the 3rd table 
NSArray *elements  = [xpathParser searchWithXPathQuery:@"//table[3]/tr[2]/td"];

// Access the first cell
TFHppleElement *element = [elements objectAtIndex:0];

// Get the text within the cell tag
NSString *content = [element content];  

[xpathParser release];
[data release];

Известные проблемы

Поскольку hpple представляет собой оболочку над XPathQuery, которая является другой оболочкой, этот вариант, вероятно, не самый эффективный. Если в вашем проекте проблема с производительностью, я рекомендую написать собственное облегченное решение на основе кода библиотеки hpple и xpathquery.

89
ответ дан 24 November 2019 в 13:39
поделиться

Я написал легкую оболочку для libxml, которая может оказаться полезной:

Objective-C-HMTL-Parser

12
ответ дан 24 November 2019 в 13:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: