我有一個緩存大量RSS源的腳本,但是我注意到我已經開始在輸出緩存內容的頁面出現奇怪的字符(存儲在數據庫中)。將特殊字符保存到數據庫,然後使用PHP顯示
例如RSS提要包含字符:Introducing…: ...
哪些應該閱讀:Introducing...: ...
但是我的網頁顯示爲:Introducing…: ...
看來,這些陌生人字符實際上是被存儲在數據庫就像這樣。
任何人都可以提出我可能會出錯的地方嗎?
我需要編碼的方式進入數據庫的解碼出路嗎?
我有一個緩存大量RSS源的腳本,但是我注意到我已經開始在輸出緩存內容的頁面出現奇怪的字符(存儲在數據庫中)。將特殊字符保存到數據庫,然後使用PHP顯示
例如RSS提要包含字符:Introducing…: ...
哪些應該閱讀:Introducing...: ...
但是我的網頁顯示爲:Introducing…: ...
看來,這些陌生人字符實際上是被存儲在數據庫就像這樣。
任何人都可以提出我可能會出錯的地方嗎?
我需要編碼的方式進入數據庫的解碼出路嗎?
輸出中有3個錯誤字符的事實表明正在解釋RSS提要,以便將HTML字符引用轉換爲UTF-8。
嘗試通過將以下到輸出HTML中<head>
節設置你的顯示頁面的文本編碼成UTF-8:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
或者,因爲這是PHP,你可以直接設置HTTP標頭:
<?php
header("Content-Type: text/html; charset=UTF-8");
?>
但是,更好的解決方案可能是避免首先轉換實體。你有沒有在檢索RSS feed的代碼中調用html_entity_decode()
?如果是這樣,那麼刪除它可能是明智的。
您需要確保RSS源的編碼與您的數據庫中的編碼相同。否則,您首先需要轉換內容。
飼料的編碼應在XML頭:
<?xml version="1.0" encoding="UTF-8"?>
您可以使用此功能將其轉換爲你的數據庫所使用的編碼(最好是UTF-8):
當您使用UTF-8時,請確保您將數據庫連接設置爲utf-8 .. fe在mysql中
SET NAMES 'utf-8';
然後按照Anthony Williams的描述設置正確的輸出內容類型。充其量,你最好做兩件事情:設置META Content-Type併發送Content-Type HTTP-Header。
由於您的應用程序似乎將其寫入到數據庫之前所緩存的RSS提要的解碼ヶ輛,還可以輸出他們像你擺在首位
<?php echo htmlentities($string, ENT_QUOTES, 'UTF-8'); ?>
得到了他們