特殊字符编码不正确

时间:2011-08-08 10:26:44

标签: php mysql encoding

问题:

阿拉伯语/希伯来语/非拉丁字符,从数据库/动态源引擎中提取时,未正确呈现,而是显示为“??????” click to enlarge enter image description here

故事(调试步骤):

每当用户将某些东西(比如上面显示的meta关键字)保存到数据库时,它就会以正确的编码正常保存,但保存后字符不能正确呈现,而是“?????”由于编码问题。

所有文件都是UTF-8编码,标题是UTF-8,数据库排序是utf8_general_ci,元字符集是utf-8,数据库连接也是utf-8。

通过MySQL控制台或PHPMyAdmin直接保存关键字会产生相同的结果,因此问题在于显示字符而不是保存它们。

使用mysql_query + mysql_fetch_array手动获取关键字将解决问题,因此问题是由用于获取关键字的函数(或包含此函数的文件)引起的。

解决方案:

可以找到Here

最好的问候

3 个答案:

答案 0 :(得分:1)

如果您使用MySQL检查您的表和列是否设置为utf8。如果您已创建所有数据库结构并且之后将数据库编码更改为utf8,则不会更改现有表和列的编码。它只是为新创建的关系设置默认编码。

答案 1 :(得分:0)

我注意到你的网页是XHTML,不要在XHTML页面上使用htmlentities()(即使编码正确)。在XHTML(或XML)文档中应转换为实体引用的唯一字符是&,“,<,>

function xmlEntities( $s ) {
    return str_replace( array( '&', '"', '<', '>' ),
                    array( '&amp;', '&quot;', '&lt;', '&gt;' ), $s );
}

答案 2 :(得分:0)

解决方案:

似乎编辑器用来保存文件,因为UTF8有一个错误并且没有正确编码保存它们。 切换到Sublime Text 2,并将所有文件保存为UTF8已解决问题。

最好的问候