我需要紧急帮助。我无法比较charset字符串。写入数据库table1的字符串是utf-8 charset
,但看起来仍然很奇怪:SADI
但是,在同一数据库中写入table2的字符串是SADI
,这是正常的。
每当我比较两者时,它都会给出错误。
知道如何进行比较吗? (实际比较应该给出真实的结果)
知道如何将SADI作为SADI
插入数据库。
希望这两种方法都是一种解决方案。
答案 0 :(得分:2)
在字符串中,SADI
是标准的ASCII字符串,但SADI
使用的是全角Unicode字符。
例如,S
为U+FF33 'FULLWIDTH LATIN CAPITAL LETTER S'(UTF-8:0xEF 0xBC 0xB3
),
但S
是标准ASCII U+0053 'LATIN CAPITAL LETTER S'(UTF-8 0x53
)。
其他字符也是类似的扩展Unicode字符,看起来像标准的拉丁字母,但实际上并非如此。
他们是如何到达那里的 - 这是一个很好的问题。可能有人真的有创意并且从Word中复制粘贴了一些东西?谁知道呢。
你可以通过使用这个Perl脚本作为过滤器(它接受UTF-8并输出规范化的UTF-8)来应用Unicode NFKC(Unicode Normalization Form KC)将这些奇怪的字符转换回正常字符:
use Unicode::Normalize;
binmode STDIN, ':utf8';
binmode STDOUT, ':utf8';
while(<>) { print NFKC($_); }
在php中:
$result = Normalizer::normalize( $str, Normalizer::FORM_KC );