0
我有這個串在我的UTF-8 MySQL數據庫: 「Pruebá德埃內斯」特殊字符的奇怪行爲
當我打印它像純文本,一切工作正常,但如果我加載內部的同場輸入,文本區域等,就成了:「Pruebá德EA±ES」
我怎樣才能解決這個問題? =(
我有這個串在我的UTF-8 MySQL數據庫: 「Pruebá德埃內斯」特殊字符的奇怪行爲
當我打印它像純文本,一切工作正常,但如果我加載內部的同場輸入,文本區域等,就成了:「Pruebá德EA±ES」
我怎樣才能解決這個問題? =(
首先,我建議閱讀:http://www.joelonsoftware.com/articles/Unicode.html(絕對最低每一個軟件開發人員絕對,積極必須知道的關於Unicode和字符集(由Joel Spolsky的沒有藉口))非常有用
那麼,如果它是MySQL的。例如在Zend_Framework($ db-> query(「SET NAMES'utf8'」);)
另一個選擇是添加一個過濾器打印它在屏幕前的數據。我做了兩個handly功能...
function utf8encode ($subject, $action = '//TRANSLIT')
{
if (@iconv('UTF-8', "UTF-8{$action}", $subject) == $subject) {
#-- the value it's utf8
} else {
$subject = utf8_encode ($subject);
}
return $subject;
}
function utf8decode ($subject, $action = '//TRANSLIT')
{
if (@iconv('UTF-8', "UTF-8{$action}", $subject) == $subject){
$subject = utf8_decode ($subject);
} else {
#-- the value is probably ISO-8859-1
}
return $subject;
}
唔...沒關係。它似乎所有的輸入,textarea打印通過此:htmlentities($ data,ENT_QUOTES)/ /前面的程序員實現,因爲它是一個latin1_general_ci分貝。 – andufo 2010-06-01 20:15:33
打印到什麼?安慰?網頁? – 2010-06-01 20:15:42
你應該使用'htmlspecialchars'和* not *'htmlentities'(除非你有特殊的理由並知道你在做什麼)。 'htmlentities'會弄亂非ASCII字符,除非你告訴它正確的'$ charset'參數(默認是不明智的)。 **不要**只是刪除'htmlentities'調用,因爲您可能會引入HTML注入漏洞(導致XSS)。改爲使用'htmlspecialchars'。 – bobince 2010-06-01 21:37:42