And*_*ift 7 mysql utf-8 iso-8859-1 smart-quotes iconv
我有一个MySQL表,其中120,000行以UTF-8格式存储.有一个字段,产品名称,包含带有许多重音的文本.在将其转换为友好的URL形式(ASCII)后,我需要使用相同的名称填充第二个字段.
由于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);
(是UTF-8智能单引号的原始值)
因为文本文件太长,所以这些str_replace会导致脚本每次都超时.
在运行iconv之前,从UTF-8字符串中删除智能引号(或任何无效字符)的最快方法是什么?
或者,这个问题是否有更简单的解决方案?将具有多个重音符号(UTF-8)的名称转换为没有重音符号,拼写正确的ASCII格式的最快方法是什么?
“链接友好”是什么意思?对我来说唯一有意义的方法是,因为<a>...</a>标签之间的文本可以是任何内容,实际上是“URL友好”,类似于SO的URL,其中所有内容都转换为[a-z-].
如果这就是您想要的,您将需要一个音译库,而不是字符集转换库。(过去我没有运气让 iconv() 来完成这项工作,但我有一段时间没有尝试过。)有一个 beta PHP 扩展translit可能可以完成这项工作。
如果您无法向 PHP 安装添加扩展,则必须寻找具有相同功能的 PHP 库。我还没有使用过它,但PHP UTF-8库实现了一个utf8_to_ascii库,我认为它可以完成您需要的功能。
(此外,如果 iconv() 像您所说的那样失败,则意味着您的输入实际上不是有效的 UTF-8,因此用其他任何内容替换有效的 UTF-8 都无法解决问题。编辑:我可以认为返回:如果ephemient 的答案是正确的,您看到的 iconv 错误很可能是因为目标字符集中没有直接表示该字符。所以,没关系。)
| 归档时间: |
|
| 查看次数: |
9693 次 |
| 最近记录: |