gpt4 book ai didi

mysql - iconv 给 "Illegal Character"加上智能引号——如何去掉它们?

转载 作者:可可西里 更新时间:2023-11-01 06:37:05 25 4
gpt4 key购买 nike

我有一个 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导致脚本每次都超时。

  1. 在运行 iconv 之前,从 UTF-8 字符串中删除智能引号(或任何无效字符)的最快方法是什么?

  2. 或者,对于整个问题是否有更简单的解决方案?将 UTF-8 中有很多重音符号的名称转换为没有重音符号且拼写正确的 ASCII 名称的最快方法是什么?

最佳答案

Glibc (和 GNU libiconv )supports //TRANSLIT//IGNORE 后缀。

因此,在 Linux 上,这工作得很好:

$ echo $'\xe2\x80\x99'’$ echo $'\xe2\x80\x99' | iconv -futf8 -tiso8859-1iconv: illegal input sequence at position 0$ echo $'\xe2\x80\x99' | iconv -futf8 -tiso8859-1//translit'

我不确定 PHP 使用的是什么 iconv,但文档暗示 //TRANSLIT//IGNORE 将也在那里工作。

关于mysql - iconv 给 "Illegal Character"加上智能引号——如何去掉它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/911587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com