php-utf8中“混乱字符”列表
作者:互联网
我的一位客户有一个网站,这个网站完全被托管公司强加于整个数据库中的一个字符集.以前我们在字符集方面遇到了麻烦,但是现在这只是一部戏剧!
到目前为止,我已经将charset = utf-8添加到页面内容类型中,并将mysql连接的字符集设置为utf8.现在该替换所有字符了.到目前为止,我发现的是:
ö = ö
ë = ë
é = é
像这样更新数据库内部的数据:
UPDATE table SET `fieldname` = REPLACE(`fieldname`, 'ö', 'ö');
现在,我只需要查找混乱的Alle字符的完整列表.我尝试了一个MySQL查询来搜索字段LIKE’%Ã%’,但这返回了数据库中的所有记录.
Google在遇到麻烦的其他人的一些主题中也只显示了几个字符(大多数是上面的3个),但是似乎找不到这些字符的完整列表(或者至少是最常见的).并替换我客户的所有数据.
作为回报,如果有人知道这样的位置或能够完成我的列表,那么我将创建一个包含这些字符的页面来帮助他人(除非已经有一个列表,我当然不知道该列表).
//编辑:
它适用于最常见的欧洲字符,例如éè,áàä,öóò,ï,ü和ringel-S(德语double S).对于诸如ñ或ã这样的跨度符号来说,并不是很多,但是如果它们在列表中的某个位置,那将是非常值得赞赏的.
//编辑2:
我使用本文第1部分中的2个ALTER查询更新了MySQL数据库和表:http://developer.loftdigital.com/blog/php-utf-8-cheatsheet.到目前为止,我还没有使用过mb_函数,并且似乎没有进行任何MB配置.
标头在文件中都设置为utf-8(我仍然必须检查一些ajax脚本的标头,不确定是否需要这样做,但这不会造成危害).并且所有文件都保存为UTF8,没有BOM.通过将字符集设置为utf-8,也可以更新PHPFreakMailer.
够糟糕的是,我仍然有这些奇怪的角色.我不是在想他们会自己消失,但至少值得这样:-)那么,我应该采取的最后一步是什么?继续使用REPLACE查询并手动更改所有奇怪的字符?
提前致谢!
解决方法:
这有点疯狂;您认为“ö”位于哪个字符集中?
看起来这实际上是正确的UTF-8序列(因为它是两个字节),您只是将其显示为ISO-8559-1.
编辑:
根据您的评论,我认为以下情况正在进行:
我认为(但实际上不是100%肯定)正确的UTF-8二进制序列存储在数据库中.但是由于该表被标记为ISO-8559-1,因此您要求自动转换字符集.因此,它认为它是ISO-8559-1(看起来像¶),但随后尝试将其转换为UTF-8.
如果strlen(‘Ã’)是4,而不是2,您应该能够验证这一点.如果长度确实是2,则您的浏览器编码会以某种方式破坏.
要解决此问题,请不要将MySQL设置为对字符进行编码.
选项2
数据也可以在表中进行“双重编码”.要检查这一点,只需检查数据库中的字符串长度即可.如果’ö’是4个字节长,这就是问题所在.
在这种情况下,我的建议是不要尝试制作大的“混乱人物”地图.您应该只能够“ utf8_decode”字符串.通常,此函数将输出ISO-8559-1字符串,但是在您的情况下,它应该是原始的有效UTF-8字符串.
我希望这行得通!
编辑2
好吧,我认为发生的事情是有效的方法2.用简单的(php)术语来说:
$output = utf8_encode(utf8_encode('string'));
因此,一个utf8_decode()应该足够了.
在运行迁移脚本之前,请先进行测试:)
标签:character-encoding,utf-8,special-characters,php 来源: https://codeday.me/bug/20191102/1992929.html