我有一个 MySQL 表,其中 120,000 行以 UTF-8 格式存储。有一个字段,产品名称,其中包含带有许多重音符号的文本。在将第二个字段转换为对 url 友好的表单 (ASCII) 后,我需要用相同的名称填充第二个字段。
由于 PHP 不直接处理 UTF-8,我正在使用:
$value = iconv ('UTF-8', 'ISO-8859-1', $value);
将名称转换为 ISO-8859-1,然后是一个庞大的 strstr 语句,将任何重音字符替换为其非重音等效字符(例如,à 变为 a)。
但是,原始文本名称是用智能引号输入的,并且 iconv 遇到一个就会窒息——我得到:
未知错误类型:[8] iconv() [function.iconv]:在输入字符串中检测到非法字符
为了在使用 iconv 之前摆脱智能引号,我尝试使用三个语句,例如:
$value = str_replace('’', "'", $value);
(’ 是 UTF-8 智能单引号的原始值)
因为文本文件太长,这些 str_replace 会导致脚本每次都超时。
在运行 iconv 之前,从 UTF-8 字符串中去除智能引号(或任何无效字符)的最快方法是什么?
或者,是否有更简单的解决方案来解决整个问题?将 UTF-8 中具有多种重音符号的名称转换为 ASCII 中没有重音符号且拼写正确的名称的最快方法是什么?