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