2017-01-20 164 views
-1

我使用這個代碼的網頁的打印內容(源代碼)工作:打印內容不爲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不正確的問題。

當您使用谷歌的網站上正確的編碼,你得到的結果是你想要的:

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

tnx很多,但我如何設置一個函數來覆蓋所有的編碼? – sami

+0

如果你想確保編碼的字符串,你需要ENT_SUBSTITUTE和ENT_DISALLOWED。我使用'函數hhb_tohtml(string $ str):string { return htmlentities($ str,ENT_QUOTES | ENT_HTML401 | ENT_SUBSTITUTE | ENT_DISALLOWED,'UTF-8',true); }' – hanshenrik