我有页面,taht从不同的数据库(可能有不同的字符集)加载数据。 问题是,它加载了破坏的字符集到UTF-8。 我需要找到一种方法,如何加载它。
我的联系是:
$db = new PDO("mysql:host=".DBHOST.";dbname=".DBNAME, DBUSER, DBPASS);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, 'SET NAMES utf8');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
如您所见,我使用'SET NAMES utf8'
我在<meta charset="utf-8">
<head>
我尝试了一些转换:
error_log("ORGIGINAL: ".$row["title"]);
error_log("ICONV: ".iconv(mb_detect_encoding($row["title"], mb_detect_order(), true), "UTF-8", $row["title"]));
error_log("UTF_ENCODE: ".utf8_encode ($row["title"]));
我相信,我也用UTF-8加载了所有文件 (重新保存记事本中的每个文件从ANSI切换到UTF-8。然后尝试使用此工具进行验证https://nlp.fi.muni.cz/projects/chared/)
现在,有趣的地方开始了: 不仅输出错误,我的浏览器和错误日志输出也不同。
FIREFOX反应:
原件:
函数utf8_encode:
的iconv: 与utf8_encode相同
正如您所看到的,输出在原始形状中具有最佳效果,而如果尝试转换,则输出变形更多。还尝试将错误日志文件字符集更改为UTF-8(可能是原始未知/ ANSI),但在两种编码中都是相同的形状)
文字是中欧/捷克。 需要的字符是: áíóú...... žščřďťňě
那么,任何想法,哪里可能出错?
谢谢:)
答案 0 :(得分:0)
请勿使用任何转换功能。
黑钻有两个原因;见Trouble with utf8 characters; what I see is not what I stored
错误文件显示Mojibake,或者可能是“双重编码”。这些也在上面的链接中讨论过。
检查Firefox是否将该页面解释为UTF8。旧版本并不一定是这样的。
哦,我刚刚注意到了简单的问号。 (也在链接中有所说明。)你赢得了大部分奖项的奖项,只能在单个文件中修改UTF8!
这可能意味着发生了多个错误。祝好运。如果您在各个阶段(在PHP中,在数据库表中等)提供HEX
数据,我可能会提供更多详细信息。
捷克字符集的一个问题是在西欧子集中发现了一些字符(具有急性重音的字符),因此更有可能正确呈现。其他口音主要针对捷克(带有卡通),并沿着不同的路径前进。这解释了为什么您的一些样品会出现两种不同的故障情况。 (在这个论坛上搜索捷克语;你可以提供更多提示。)
经过一些实验......
?eské
可能来自表格CHARACTER SET
(或其他“拉丁语”)列的latin1
,并且在插入时将连接建立为latin1
数据。这可以在浏览器中看到,当它处于西方模式时,而不是utf8。
?esk�
会显示, 会在选择期间将latin1作为连接。浏览器设置为utf8时可以看到。
警告:分析可能不是获得所见内容的唯一途径。