2011-10-05 35 views
8

我遇到了PHP的htmlentities和é字符問題。我知道這是某種我只能忽略的編碼問題,所以希望有人能看到我做錯了什麼。htmlentities和é(e急)

運行直htmlentities("é")預期不會返回正確的代碼(無論是éé。我已經試過被迫字符集是「UTF-8」(使用ヶ輛的charset參數),但同樣的事情。

最終目標是讓這個字符以'ISO-8859-1'編碼的HTML電子郵件發送。當我試圖強迫它進入該編碼時,同樣的問題。在電子郵件的來源中,您會看到é,並在HTML視圖é

誰能闡明我的錯誤?

+0

嘗試調用'get_html_translation_table()'和看結果數組。這會告訴你你的e-acute是否應該翻譯。如果這不起作用,你總是可以得到這張表,給它加上e-sharp,然後用'strtr($ string,$ table)'來完成編碼。 –

+0

確保您的文件使用UTF-8編碼,並確保您已正確設置了編碼字符。 –

+0

如果您將您的站點編碼設置爲UTF-8(使用''標籤或http標頭,則根本不需要對重音字符進行實體編碼。 – Spudley

回答

11
// I assume that your page is utf-8 encoded 
header("Content-type: text/html;charset=UTF-8"); 

$in_utf8encoded = "é à ù è ò"; 

// first you need the convert the string to the charset you want... 
$in_iso8859encoded = iconv("UTF-8", "ISO-8859-1", $in_utf8encoded); 

// ...in order to make htmlentities work with the same charset 
$out_iso8859= htmlentities($in_iso8859encoded, ENT_COMPAT, "ISO-8859-1"); 

// then only to display in your page, revert it back to utf-8 
echo iconv("ISO-8859-1", "UTF-8", $out_iso8859); 
+0

謝謝!'iconv'固定我的郵件編碼問題。 –

+0

歡迎您:) – 2011-10-05 15:55:27

+0

添加編碼是關鍵 - 尤其是如果htmlentities之前爲您工作,並打破。 PHP團隊有一個巧妙的想法,不僅僅是將默認值*更改爲一次,而是兩次。在5.4之前,它是ISO-8859-1。 5.4之後和5.6之前它是UTF-8。從5.6開始,無論你的php.ini中的default_charset設置如何。一旦你指定編碼,它會再次工作,不需要htmlspecialchars。請記住,如果您突然丟失數據,因爲您依賴的記錄(!)默認值沒有更改。 PHP總是充滿驚喜 - 而不是一個好方法。 – Aaa

2

我建議你看看http://php.net/html_entity_decode。你可以通過以下方式使用它:

$eacute = html_entity_decode("é",ENT_COMPAT,"iso-8859-1"); 

這樣你就不必關心php文件的編碼了。 編輯:錯字

+0

我並不試圖解碼,我試圖請在發帖前仔細閱讀問題 –

-3

如果您已將特殊字符存儲爲é,則可以在連接到database後立即使用以下內容。

mysql_set_charset('utf8', $dbHandler); 

有了這個,您現在不需要在顯示數據時使用htmlentities

+0

我不記得有關數據庫的任何說法 –

+0

我知道,但我建議在我的情況下和你一起工作,使用這種方式,它將編碼所有內容從數據庫拉,並會避免使用其他PHP函數,如'htmlentities','html_entity_decode','html_entity_encode'等 –

+0

我的情況不涉及任何形式的數據庫,形狀或形式。 OP。請在快速發帖前閱讀。 –