2017-01-20 6 views
-1

Я использую этот код для печати содержимого веб-страницы (исходный код):печати содержимого страницы с помощью htmlentities не работают для google.com

<?php 
$url='http://cloob.com'; 
$ch=curl_init(); 
$timeout=5; 

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
// Get URL content 
$lines_string=curl_exec($ch); 
// close handle to release resources 
curl_close($ch); 
var_dump(htmlspecialchars($lines_string)); 
//echo htmlentities($lines_string); 
//var_dump($lines_string); 
?> 

Это работает, но когда я изменить URL для https://google.com не работает, почему?

Он работал, когда я непосредственно использовать (если я не использую htmlentities()) как в ситуации ... (я использую http://phpfiddle.org/)

+0

Пожалуйста, более конкретно, чем сказать «это не работает.» Какие результаты вы видите? Какие результаты вы ожидаете? Если есть сообщения об ошибках, поделитесь ими. – Metropolis

ответ

0

Первое, что нужно сделать, это прочитать docs:

Если входная строка содержит недопустимую последовательность блоков кода в данной кодировке, будет возвращена пустая строка, если не установлены флаги ENT_IGNORE или ENT_SUBSTITUTE.

Таким образом, у нас может возникнуть проблема с PHP, анализирующим HTML, или кодировка неправильная, или HTML неправильный.

При использовании правильной кодировки для веб-сайта Google, вы получите результат, который вы хотите:

var_dump(htmlspecialchars($lines_string, ENT_COMPAT, 'ISO-8859-1')); 
+0

tnx alot но как я установил функцию для покрытия всех кодировок? – sami

+0

, если вы хотите обеспечить закодированную строку, вам понадобятся как ENT_SUBSTITUTE, так и ENT_DISALLOWED. Я использую 'function hhb_tohtml (string $ str): string { return htmlentities ($ str, ENT_QUOTES | ENT_HTML401 | ENT_SUBSTITUTE | ENT_DISALLOWED, 'UTF-8', true); } ' – hanshenrik