Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 与特殊字符(html、实体、解码、iconv等)斗争_Php_Mysql_Character Encoding - Fatal编程技术网

Php 与特殊字符(html、实体、解码、iconv等)斗争

Php 与特殊字符(html、实体、解码、iconv等)斗争,php,mysql,character-encoding,Php,Mysql,Character Encoding,我一直在努力将一堆字符翻译成核心utf-8,以便将它们存储在我的数据库中 PHP iconv在很多字符上都失败了,因此我不得不构建自己的“解决方案”,如果它不起作用,它实际上不是一个解决方案,而且在windows中几乎完全失败,因此使用iconv进行开发基本上是徒劳的,因为我必须在测试服务器上进行“开发”。此外,由于iconv遗漏了大量字符,因此它根本没有什么帮助 这是我的函数所做的 function replace_accents($string) { return str_replac

我一直在努力将一堆字符翻译成核心utf-8,以便将它们存储在我的数据库中

PHP iconv在很多字符上都失败了,因此我不得不构建自己的“解决方案”,如果它不起作用,它实际上不是一个解决方案,而且在windows中几乎完全失败,因此使用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; } 函数替换重音($string){ 返回str的更换(阵列(阵列)的返回返回str的更换(阵列(阵列)的返回str的更换(阵列(阵列(“,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,“Ý”,数组(‘a’、‘a’、‘a’、‘a’、‘c’、‘e’、‘e’、‘e’、‘i’、‘i’、‘i’、‘n’、‘o’、‘o’、‘u’、‘u’、‘y’、‘a’、‘a’、‘c’、‘e’、‘e’、‘e’、‘i’、‘i’、‘i’、‘n’、‘o’、‘o’、‘u’、‘u’、‘u’、‘u’、‘o’、‘u’、‘u’、‘u’、‘u’、‘u’、‘u’、‘u’、‘u’、‘u’、‘u’、‘u’、‘u’、‘u’、‘u’、‘u’、‘u’、‘u’、‘u’)、‘u’、‘u’、‘u’、‘u’、、‘u’; } 函数replaceQuote($string){ $replaceQuote=数组(“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、'’、“”); 返回str_replace($replaceQuote,'\'',$string); } 函数replaceArray($string){ $replaceArray=数组('-','™','&贸易;",™','©', '®', '®','©', '¡', '¡', '¢', '¢', '£', '£', '¤', '¥', '¥', '¦', '§', '§', '«', '«', '¬', '¬', '­', '¯', '¯', '²', '³', 'µ', 'µ', '¶', '¶', '·', '·', '¸', '¸', '¹', 'º', 'º','»', '‹', '»','¼', '½','¾','♥', '☆', '☠', '░','▒','▓','█', '★', '♪','♫','◄','▀','▄','►', '¤', '^', '☣', '…', '†', '‡', '.:','♣','Ξ','ξ','↠','⇒','→','↞','⇐','←', '⇔','↔','™','♠','&loz','√','∩','&帽‘,’∴'); 返回str_replace($replaceArray,,$string); } 函数特殊替换($string){ $replace_from=数组(‘ƒ’、‘Œ’、‘œ’、‘•’、‘一’、‘一’、‘一’、‘一’、‘š’、‘Ÿ’、‘ÿ’、‘ε’, '€','α','Α','τ','Τ','θ','Θ'); $replace_to=数组(‘ƒ’、‘Œ’、‘œ’、‘•’、‘-’、‘-’、‘~’、‘š’、‘ÿ’、‘ε’、‘欧元’、‘α’、‘Α’、‘τ’、‘œ’、‘θ’、‘Θ’); 返回str_replace($replace_from,$replace_to,$string); } 函数dbSlug($slugIt){ $slugIt=html\u entity\u decode($slugIt); $slugIt=replaceArray($slugIt); $slugIt=replaceQuote($slugIt); $slugIt=特殊更换($slugIt); //$slugIt=iconv('ISO-8859-1','UTF-8//TRANSLIT//IGNORE',$slugIt); $slugIt=替换口音($slugIt); $slugIt=trim($slugIt); 退回$slugIt; } 有时,我在多个替换函数中具有相同的字符,但我在多个位置以不同的方式使用这些函数,因此,这就是为什么我在多个替换函数中可能具有相同字符的原因

现在的问题是,每次我去查看数据时,我都会发现另一个特殊的字符,而这个字符并没有在我查找和替换/删除字符的迷宫中找到

当前的攻击性角色是您认为相当无害的“”。 并不是所有的空间都会影响到你,它似乎只会影响到一些空间(我还不知道为什么)

我已经做了一个多星期了,每次我回头看,我都有更多的东西要添加到“修复”中

我不是在问如何删除“字符”,我希望能够解决如何保持内容/数据的完整性,但不要使用特殊字符,这些字符在移动数据和保持可搜索性时有时会弄乱

我愿意 preg_replace("/[^a-zA-Z0-9,-\'-!&.etc]/", "", $data); 预替换(“/[^a-zA-Z0-9、“-!”和.etc]/”、“,$data”); ,但我担心我会开始把单词弄糟,因为遗漏的特殊字符会被替换掉。 我已经有过这样的经历,在《墨西哥》即将推出的《墨西哥偶像》中,这样做是行不通的

字符编码应该是UTF-8,尽管我在编码之前尝试过将标题更改为ISO-8859-1,或者没有设置任何编码,但我总是得到相同的结果

我确信我得到的可能是最糟糕的方法,但我还没有找到有效的解决方案。有什么建议吗?我担心这几乎是永无止境的,我总是在迷宫般的翻译过程中发现被遗漏的新角色

  • 将PHP文件另存为UTF-8
  • 连接时,设置名称“UTF8”
  • 如果仍需要替换字符,请执行以下操作:

    $string = preg_replace('~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_COMPAT, 'UTF-8'));
    
    编辑

    $string = html_entity_decode(preg_replace('~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_COMPAT, 'UTF-8')), ENT_COMPAT, 'UTF-8');
    

    您可以使用html实体解码($strint,ENT_引号,'UTF-8')


    我在使用西班牙语特殊字符时遇到了一些问题。我解决了这个问题。

    您在mysql中存储utf8编码字符的实际问题是什么?所有这些音译代码似乎都表明您的mysql连接字符集有问题,您无法实际发送utf8字符。并非所有代码都是关于存储的通过使用utf8编码字符,其中一些实际上是去除无用字符,如'★'. 问题似乎有两个方面。eyze的回答似乎(我希望)是为了清理我已经剥离/替换的东西中留下的东西。不幸的是,我的服务器似乎不接受文件中的编码,因此剥离(或尝试)了角色仍然没有被删除。哇!!这很好而且简洁。而且它也非常有效(在我做的有限测试中)。一个问题