jsd*_*ton 93
如果您有双重编码的UTF8字符(各种智能引号,破折号,撇号,引号等),在mysql中您可以转储数据,然后将其读回以修复损坏的编码.
像这样:
mysqldump -h DB_HOST -u DB_USER -p DB_PASSWORD --opt --quote-names \
--skip-set-charset --default-character-set=latin1 DB_NAME > DB_NAME-dump.sql
mysql -h DB_HOST -u DB_USER -p DB_PASSWORD \
--default-character-set=utf8 DB_NAME < DB_NAME-dump.sql
Run Code Online (Sandbox Code Playgroud)
这是我的双重编码UTF-8的100%修复.
资料来源:http: //blog.hno3.org/2010/04/22/fixing-double-encoded-utf-8-data-in-mysql/
Seb*_*oli 80
如果你utf8_encode()在一个已经是UTF-8的字符串上,那么当它被多次编码时它看起来很乱.
我创建了一个toUTF8()将字符串转换为UTF-8 的函数.
您无需指定字符串的编码.它可以是Latin1(iso 8859-1),Windows-1252或UTF8,或者这三者的混合.
我自己在同一个字符串中使用混合编码的Feed中使用它.
用法:
$utf8_string = Encoding::toUTF8($mixed_string);
$latin1_string = Encoding::toLatin1($mixed_string);
Run Code Online (Sandbox Code Playgroud)
fixUTF8()如果它们被多次编码为UTF8,我的其他函数修复了乱码的UTF8字符串.
用法:
$utf8_string = Encoding::fixUTF8($garbled_utf8_string);
Run Code Online (Sandbox Code Playgroud)
例子:
echo Encoding::fixUTF8("Fédération Camerounaise de Football");
echo Encoding::fixUTF8("Fédération Camerounaise de Football");
echo Encoding::fixUTF8("FÃÂédÃÂération Camerounaise de Football");
echo Encoding::fixUTF8("Fédération Camerounaise de Football");
Run Code Online (Sandbox Code Playgroud)
将输出:
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Run Code Online (Sandbox Code Playgroud)
下载:
https://github.com/neitanod/forceutf8
Eli*_*Eli 62
我不得不试图在过去"修复"一些UTF8破坏的情况,不幸的是,这从来都不容易,而且往往是不可能的.
除非你能确切地确定它是如何被打破的,并且它总是以完全相同的方式被打破,否则很难"消除"这种伤害.
如果您想尝试撤消损坏,最好的办法是开始编写一些示例代码,在这些代码中您尝试对mb_convert_encoding()调用进行多种变化,以查看是否可以找到"from"和"to"的组合.修复您的数据.最后,由于所涉及的痛苦程度,通常最好不要担心修复旧数据,而只是解决未来的问题.
但是,在执行此操作之前,您需要确保首先修复导致此问题的所有内容.您已经提到您的数据库表格排序和编辑器设置正确.但是有更多地方需要检查以确保所有内容都是正确的UTF-8:
如果您错过了整个过程中的任何一步,编码可能会被破坏并出现问题.一旦你进入了做utf-8的'凹槽',这一切都成了第二天性.当然,PHP6应该是来自getgo的完全unicode投诉,这将使这很容易(希望如此)
小智 12
我有一个xml文件有一个问题,它有一个破碎的编码,它说它是utf-8但它的字符不是utf-8.
经过几次试验和错误,mb_convert_encoding()我设法解决它
mb_convert_encoding($text, 'Windows-1252', 'UTF-8')
Run Code Online (Sandbox Code Playgroud)
blu*_*yed 10
正如Dan指出:你需要将它们转换为二进制,然后转换/更正编码.
例如,对于存储为latin1的utf8,以下SQL将修复它:
UPDATE table
SET field = CONVERT( CAST(field AS BINARY) USING utf8)
WHERE $broken_field_condition
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
114998 次 |
| 最近记录: |