[英]file_get_contents() breaking ISO-8859-1 encoding
我正在嘗試使用file_get_contents()閱讀頁面,但無法使字符編碼正常工作。
這是我的代碼:
$username = "masked";
$password = "maskedPass";
$remote_url = 'https://utfws.utfpr.edu.br/aluno01/sistema/mplistahorario.inicio?p_curscodnr=212';
// Create a stream
$opts = array(
'http'=>array(
'method'=>"GET",
'header' => array(
"Authorization: Basic " . base64_encode("$username:$password"),
'Accept-Charset: iso-8859-1'
)
)
);
$context = stream_context_create($opts);
// Open the file using the HTTP headers set above
$file = file_get_contents($remote_url, false, $context);
echo $file;
我試圖將字符編碼更改為utf-8,但總是看到帶有問號的頁面,而不是áéíóúãúçç。
當我直接在瀏覽器中打開頁面時,它可以正常工作。 為什么會這樣呢?
在我看來,這可能只是丟失編碼細節的問題。
您要描述的是:
在第3步中看到丟失了編碼規范的地方嗎?
可以使用8859-1正確解碼數據,但是只有在將查看器默認配置為使用該編碼的情況下,才可以使用8859-1解碼數據。 某些應用的默認默認設置為8859-1,但如今UTF-8更為常見。
如果將數據加載到另一個存儲引擎(例如mysql)中,則問題可能更加復雜。 mysql將字符集與文本數據相關聯。 如果您的數據庫默認為utf-8,並且您沒有告訴它數據實際上是在8859-1中,但是您沒有告訴它數據是在8859-1中,那么現在您要向它提供假定的數據將其保存為utf-8,並且以后的數據將在數據庫中被同樣對待。 現在,即使您將來要求數據庫提供8859-1,數據也會從utf-8重新編碼為8859-1,但這不是有效的utf-8,這是另一組錯誤的字節。
要解決此問題,請在查看數據或將其保存到數據庫時指定編碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.