Использование PHP DOMDocument :: preserveWhiteSpace = false и получение пробелов - PullRequest
0 голосов
/ 02 апреля 2012

Я чищу эту страницу:
http://kat.ph/search/example/?field=seeders&sorder=desc

Таким образом:

...
curl_setopt( $curl, CURLOPT_URL, $url );
$header = array (
    'Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3',
    'Accept-Encoding:gzip,deflate,sdch',
    'Accept-Language:en-US,en;q=0.8',
    'Cache-Control:max-age=0',
    'Connection:keep-alive',
    'Host:kat.ph',
    'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.142 Safari/535.19',
);
curl_setopt( $curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.142 Safari/535.19'); 
curl_setopt( $curl, CURLOPT_HTTPHEADER, $header ); 
curl_setopt( $curl, CURLOPT_REFERER, 'http://kat.ph' ); 
curl_setopt( $curl, CURLOPT_ENCODING, 'gzip,deflate,sdch' ); 
curl_setopt( $curl, CURLOPT_AUTOREFERER, true ); 
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 ); 
curl_setopt( $curl, CURLOPT_TIMEOUT, 10 );

$html = curl_exec( $curl );
$dom = new DOMDocument;
$dom->preserveWhiteSpace = FALSE;
@$dom->loadHTML( $html );

( Пришлось имитировать браузер, чтобы это работало, следовательно CURL )

Но я все еще получаю DOMNodes типа #text, который состоит только из пробельных символов.

Есть идеи, почему это происходит и как этого избежать?

1 Ответ

3 голосов
/ 02 апреля 2012

Похоже, что свойство preserveWhiteSpace просто устанавливает флаг libxml2 XML_PARSE_NOBLANKS, который не всегда надежен, так как этот поток предполагает. В частности, при разборе без DTD, как в этом случае, синтаксический анализатор при некоторых обстоятельствах сохраняет пустые текстовые элементы (в основном, если они являются родственными элементами других нетекстовых элементов).

Поток может быть немного устаревшим, но поведение все еще существует, как описано .

...