我有一個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