我一直在努力获得一堆字符转换为核心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