2010-09-23 95 views
0

我有一個緩存大量RSS源的腳本,但是我注意到我已經開始在輸出緩存內容的頁面出現奇怪的字符(存儲在數據庫中)。將特殊字符保存到數據庫,然後使用PHP顯示

例如RSS提要包含字符:Introducing…: ...

哪些應該閱讀:Introducing...: ...

但是我的網頁顯示爲:Introducing…: ...

看來,這些陌生人字符實際上是被存儲在數據庫就像這樣。

任何人都可以提出我可能會出錯的地方嗎?

我需要編碼的方式進入數據庫的解碼出路嗎?

回答

0

輸出中有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()?如果是這樣,那麼刪除它可能是明智的。

1

您需要確保RSS源的編碼與您的數據庫中的編碼相同。否則,您首先需要轉換內容。

飼料的編碼應在XML頭:

<?xml version="1.0" encoding="UTF-8"?> 

您可以使用此功能將其轉換爲你的數據庫所使用的編碼(最好是UTF-8):

http://php.net/manual/function.mb-convert-encoding.php

0

當您使用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'); ?> 
得到了他們
相關問題