FXIX
снова к теме парсеров
.
Цитата:
$a='
<html>
<head>
<meta charset="UTF-8" />
<meta charset="UTF-16" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-32" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-64" />
</head>
<body>
<div class="title"> тратата </div>
</body>
</html>';
$html = phpQuery::newDocument($a);
echo $html->html(); # покажем всю строку
echo $html->find('div.title'); # найдем див
вывод:
Цитата:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-32"></head></html>
PHP Notice: Trying to get property of non-object in phpQuery-onefile.php on line 679
PHP Fatal error: Call to undefined method stdClass::markup() in phpQuery-onefile.php on line 681
т.е. ничего не находит. внутри вместо строки какое-то дерьмо. без body даже.
Цитата:
$a='
<html>
<head>
</head>
<body>
<div class="title"> тратата </div>
</body>
</html>';
$html = phpQuery::newDocument($a);
echo $html->html();
echo $html->find('div.title');
вывод:
Цитата:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"></head>
<body>
<div class="title"> тратата </div>
</body>
</html>
<div class="title"> тратата </div>
div.title находит, внутри то что нужно.
Как этой либой невалидный хтмл то парсить? в общем случае внутри строки может быть любая хуйня. хтмлдомпарсер прекрасно справляется. как эту заставить? чтобы просто загрузила внутрь себя строку, без изменений, потом далее я что-то попарсил нужное. и точка.
idk2045
dDan писал:
я от него отказался, он тупо подвисал на некоторых страницах yahoo.
phpquery пока что зе бест.
http://habrahabr.ru/blogs/php/114323/
вот кстати неплохой пост о пхп парсерах. хотя главная проблема именно в фатальных багах, согласен.
FXIX
Dr.Syshalt писал:
Кто тьюди юзает поделитесь общественно-полезными настройками. Наковырял вроде самые значимые:
Цитата:
doctype: transitional - установка доктайпа (omit - без доктайпа, auto - поставит доктайп на основе анализа документа)
tidy-mark: no - не добавлять спец.тег как флаг обработанного tidy файла
quiet: no - не показывать кол-во ошибок
write-back: yes - писать вывод в этот же файл
force-output: yes - принудительный вывод, даже отработанного с ошибками текста
output-encoding: utf8 - кодировка вывода
input-encoding: utf8 - кодировка ввода
show-errors: 0 - не показывать ошибки
show-warnings: no - не показывать предупреждения
wrap: 0 - правый маргин для текста
drop-proprietary-attributes: yes - удалит проприетарные MS аттрибуты
bare: yes - удаляет теги Microsoft HTML Word 2000, преобразует неразрывные пробелы в простые пробелы
clean: yes - удаляет презентационные Microsoft теги и аттрибуты заменяя их стилевыми правилами и хтмл-разметкой
word-2000: yes - вырезать Microsoft Word 2000 теги
escape-cdata: yes - преобразует секции <![CDATA[]]> в нормальный текст
hide-comments: yes - удаление комментов
merge-divs: no - не сливать вложенные дивы
merge-spans: no - не сливать вложенные спаны
не определился только с этим
http://tidy.sourceforge.net/docs/quickref.html#numeric-entities
и с тем надо ли (output-html: yes - вывод как хтмл-документ) писать
2. в пхпквери на строке 517 вроде как ошибка. текст ошибки "PHP Notice: Undefined variable: hltml in /home/user/phpQuery-onefile.php on line 517"
idk2045
я вот так запускал, щас уже толком не помню опций
Код:
/usr/lib/tidy -utf8 -wrap 0 -f %ERRORFILE% %FILENAME%