Php 未正确编码的特殊字符 问题是:

Php 未正确编码的特殊字符 问题是:,php,mysql,encoding,Php,Mysql,Encoding,从数据库/动态源引擎中提取的阿拉伯语/希伯来语/非拉丁语字符不会正确呈现,而是显示为“??” 故事(调试步骤): 每当用户将某个内容(如上图所示的元关键字)保存到数据库中时,通常会使用正确的编码进行保存,但保存后,由于编码问题,字符不会正确呈现,而是显示为“??” 所有文件都是UTF-8编码的,头作为UTF-8发送,数据库排序规则为utf8\U general\U ci,元字符集设置为UTF-8,与数据库的连接也是UTF-8 通过MySQL控制台或PHPMyAdmin直接保存关键字将呈现相同的

从数据库/动态源引擎中提取的阿拉伯语/希伯来语/非拉丁语字符不会正确呈现,而是显示为“??”

故事(调试步骤): 每当用户将某个内容(如上图所示的元关键字)保存到数据库中时,通常会使用正确的编码进行保存,但保存后,由于编码问题,字符不会正确呈现,而是显示为“??”

所有文件都是UTF-8编码的,头作为UTF-8发送,数据库排序规则为utf8\U general\U ci,元字符集设置为UTF-8,与数据库的连接也是UTF-8

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

使用mysql\u query+mysql\u fetch\u数组手动获取关键字将解决此问题,因此此问题是由用于获取关键字的函数(或包含此函数的文件)引起的

解决方案: 可以找到


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

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

函数xmlEntities($s){
返回str_replace(数组('&',''''',''),
数组(“&;”、“”、“)、$s);
}
解决方案: 似乎用于将文件保存为UTF8的编辑器有一个bug,并且没有正确编码保存它们。 切换到UTF8并将所有文件保存为UTF8解决了此问题


致以最诚挚的问候

您可能使用了错误编码的htmlentities?是的,我使用了htmlentities,但使用了正确的编码,我甚至尝试删除它并重新保存,但仍然出错,使用更多信息编辑了主要帖子您在输出之前是否进行了任何数据转换?如果您是指重新检查并删除斜杠(例如)在输出之前,则为否,否则请简要解释我的意思是,用于字符串处理的标准PHP函数不是utf-8安全的。这些函数可能会破坏您的数据。您需要使用mb_*函数或其他一些方法。另外,在使用mb_*函数之前,不要忘记为其设置编码。整个数据库和表都已被删除ted UTF-8自启动以来
function xmlEntities( $s ) {
    return str_replace( array( '&', '"', '<', '>' ),
                    array( '&amp;', '&quot;', '&lt;', '&gt;' ), $s );
}