2011-06-23 75 views
5

我們有一個web應用程序,我們允許用戶在文本區域輸入自己的html。我們將該數據保存到我們的數據庫。htmlentities()使中文字符不可用

當我們將html數據加載到文本區域時,我們當然會在將html數據引入textarea之前使用htmlentities()。否則,用戶可以保存在textarea中,當我們的應用程序加載到textarea中時,它會中斷。

這個效果很好,除了輸入中文字符(可能還有其他語言如阿拉伯文,日文)時。

的ヶ輛()使得中國文字不能使用這樣的:èóüçï 當我加載HTML輸入到文本區,中國文字之前刪除ヶ輛()顯示得很好,但是我們遇到了HTML干擾我們textarea的問題,特別是當用戶進入文本區域時。

我希望這是有道理的。

有誰知道我們如何安全,正確地允許在我們的文本區域內使用諸如中文,日文等語言,同時仍然可以安全地在我們的文本區域內加載任何html?

+3

嘗試指定'charset'參數 – Robik

+0

您使用的是什麼字符編碼? – GordonM

+0

爲您的頁面定義了什麼字符集? –

回答

2

指定charset,例如, UTF-8,它應該工作。

echo htmlentities($data, ENT_COMPAT, 'UTF-8'); 
+0

這也適用,但我們已經在上面找到了我們的答案。感謝您的幫助! – Jorre

2

PHP是在國際字符集的框架範圍內的支持方面非常令人震驚的(儘管它慢慢好轉,尤其是在PHP5,但你使用的版本不指定)。雖然有幾個mb_(多字節,如多字節字符)函數可以幫助您。

這個例子可以幫助你(從here):

<?php 
/** 
* Multibyte equivalent for htmlentities() [lite version :)] 
* 
* @param string $str 
* @param string $encoding 
* @return string 
**/ 
function mb_htmlentities($str, $encoding = 'utf-8') { 
    mb_regex_encoding($encoding); 
    $pattern = array('<', '>', '"', '\''); 
    $replacement = array('&lt;', '&gt;', '&quot;', '&#39;'); 
    for ($i=0; $i<sizeof($pattern); $i++) { 
     $str = mb_ereg_replace($pattern[$i], $replacement[$i], $str); 
    } 
    return $str; 
} 
?> 

此外,請確保您的網頁指定相同的字符集。您可以使用中間標籤來做到這一點:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
0

最有可能你沒有使用正確的編碼找到。如果您已經知道輸出編碼,請使用html_entities function的參數charset

如果您尚未解決內部編碼問題,請查看iconv函數; iconv_set_encoding("internal_encoding", "UTF-8");可能是一個好的開始。

相關問題