我一直在努力獲得一堆字符轉換爲核心utf-8存儲在我的數據庫。用特殊字符(html_entity_decode,iconv等)努力
PHP的iconv失敗的人物衆多,所以我一直在被迫建立自己的「解決方案」,這實在不是一個解決方案,如果它不工作,並在窗口幾乎完全失敗了,有這麼發展iconv基本上是徒勞的,因爲我必須在測試服務器上'開發'。另外,由於iconv錯過了大量的角色,所以它並不是非常有用。
這裏就是我有我的功能做
function replace_accents($string) { return str_replace(array('à','á','â','ã','ä', 'ç', 'è','é','ê','ë', 'ì','í','î','ï', 'ñ', 'ò','ó','ô','õ','ö', 'ù','ú','û','ü', 'ý','ÿ', 'À','Á','Â','Ã','Ä', 'Ç', 'È','É','Ê','Ë', 'Ì','Í','Î','Ï', 'Ñ', 'Ò','Ó','Ô','Õ','Ö', 'Ù','Ú','Û','Ü', 'Ý'), array('a','a','a','a','a', 'c', 'e','e','e','e', 'i','i','i','i', 'n', 'o','o','o','o','o', 'u','u','u','u', 'y','y', 'A','A','A','A','A', 'C', 'E','E','E','E', 'I','I','I','I', 'N', 'O','O','O','O','O', 'U','U','U','U', 'Y'), $string); } function replaceQuote($string){ $replaceQuote=array('‘', '’', '「', '」', ''','‚','„',''',"’"); return str_replace($replaceQuote,'\'', $string); } function replaceArray($string){ $replaceArray=array('—', '™','™','™','©', '®', '®','©', '¡', '¡', '¢', '¢', '£', '£', '¤', '¥', '¥', '¦', '§', '§', '«', '«', '¬', '¬', '', '¯', '¯', '²', '³', 'µ', 'µ', '¶', '¶', '·', '·', '¸', '¸', '¹', 'º', 'º','»', '‹', '»','¼', '½','¾','♥', '☆', '☠', '░','▒','▓','█', '★', '♪','♫','◄','▀','▄','►', '¤', '^', '☣', '…', '†', '‡', '.:','♣','Ξ','ξ','↠','⇒','→','↞','⇐','←', '⇔','↔','','♠','&loz','√','∩','&Cap','∴'); return str_replace($replaceArray, '', $string); } function special_replace($string){ $replace_from=array('ƒ', 'Œ','œ','•', '–', '—','˜','š','Š','Ÿ','ÿ','ε', '€','α','Α','τ','Τ','θ','Θ'); $replace_to=array('ƒ', 'Œ','œ','•','-','-','~','š','Š','Ÿ','ÿ','ε','€','α','Α','τ','Τ','θ','Θ'); return str_replace($replace_from, $replace_to, $string); } function dbSlug($slugIt){ $slugIt=html_entity_decode($slugIt); $slugIt=replaceArray($slugIt); $slugIt=replaceQuote($slugIt); $slugIt=special_replace($slugIt); //$slugIt=iconv('ISO-8859-1', 'UTF-8//TRANSLIT//IGNORE', $slugIt); $slugIt=replace_accents($slugIt); $slugIt=trim($slugIt); return $slugIt; }
它可能看起來沒有效率的,因爲我有相同的字符在多個有時替換功能,但我使用的功能以不同的方式多的地方,所以這這就是爲什麼我可以在多個替換函數中擁有相同的角色。
現在的問題是,每次我去看看數據的時候,我發現,不是通過我的查找和替換/刪除文字的迷宮陷入另一種特殊字符。
目前的冒犯性格是你認爲會是一個相當無害的角色。 哪些以''結尾在數據庫中。並不是所有的空間都在意你,它似乎隻影響一些空間(我還沒有弄清楚爲什麼)。
我已經在這個時間超過一個星期,每次我回去看的時候,我有更多的添加到「修復」。
我不是問如何刪除'',我希望得到一個解決方案,以便如何保持內容/數據的完整性,但不會有特殊字符有時移動數據時真的搞砸了圍繞並保持可搜索性。
我會做
preg_replace("/[^a-zA-Z0-9,-\'-!&.etc]/", "", $data);,但我擔心,我將開始搞砸了的話在那裏它得到錯過了特殊字符被替換。 我已經有了'墨西哥'出現'墨西哥'這樣的經歷,所以這是行不通的。
字符編碼應該是UTF-8,雖然我已經試圖改變頭ISO-8859-1編碼之前,或者未設置任何編碼,我總是得到相同的結果。
我確定我得到的可能是這樣做的最糟糕的方式,但我一直無法找到有效的解決方案。有什麼建議麼?我的擔心是,這幾乎是永無止境的,我總是在翻譯的迷宮中發現新的角色。
是你的實際問題,你正試圖解決有關在MySQL中存儲utf8編碼的字符?所有音譯代碼似乎表明你的mysql連接字符集有問題,並且你實際上不能發送utf8字符。 – VolkerK 2009-08-23 18:22:35
並非所有的代碼都是關於存儲utf8編碼字符的,其中一些實際上是關於去除無用字符(如'★')。看來問題可能是兩方面的。 eyze的回答似乎(我希望)清理了我已經剝離/替換的東西剩下的東西。不幸的是,我的服務器似乎不接受文件中的編碼,因此剝離(或嘗試)的字符仍未被刪除。 – pedalpete 2009-08-24 14:50:26