我有一个MySQL表,120,000行以UTF-8格式存储。有一个字段,产品名称,其中包含许多重音的文本。在将其转换为URL友好形式(ASCII)后,我需要使用相同的名称填充第二个字段。iconv用“聪明的引号”给出了“非法字符” - 如何摆脱它们?
由于PHP不直接处理UTF-8,我使用的是:
$value = iconv ('UTF-8', 'ISO-8859-1', $value);
的名称为ISO-8859-1,其次是一个巨大的声明的strstr转换通过更换任何重音字符它的不相关的等价物(例如à变成a)。
然而,原始文本名称用智能引号进入和iconv扼流圈每当它遇到一个 - 我得到:
Unknown error type: [8] iconv() [function.iconv]: Detected an illegal character in input string
要使用的iconv之前摆脱智能引号的,我曾尝试用三句话一样:
$value = str_replace('’', "'", $value);
(A€™是UTF-8的智能单引号的原始值)
由于文本文件是这么久,这些str_replace函数的事业日e脚本每次都会超时。
什么是去掉从UTF-8字符串中的智能引号(或任何无效字符),运行的iconv之前,最快的方法是什么?
或者,有没有更容易解决这个问题?以UTF-8格式将带有许多重音的名称转换为不带重音的名称,以ASCII格式正确拼写的最快方法是什么?
你试过iconv()的// TRANSLIT能力了吗?它应该将重音字符转换为可读的ASCII等价物。 – ceejayoz 2009-05-26 16:39:36
我正在查看文档,但我不明白它将如何帮助 - 如果iconv()已经扼杀了智能报价,如果我使用// TRANSLIT,它会不会窒息? – 2009-05-26 16:45:30
这更适用于你的“大规模的strstr声明” - 这就是为什么我发表评论而不是回答。 – ceejayoz 2009-05-26 16:59:08