PHP查找字符串的任何字符是否不在ISO 8859-1中
我在检查编码时遇到问题。我知道编码乱七八糟,很难检查 我有很多选择,最后我尝试了preg_比赛 我需要检测是否有任何字符不是有效的ASCII或ISO 8859-1(mysql中的latin1) 我的结局是:PHP查找字符串的任何字符是否不在ISO 8859-1中,php,utf-8,character-encoding,latin1,Php,Utf 8,Character Encoding,Latin1,我在检查编码时遇到问题。我知道编码乱七八糟,很难检查 我有很多选择,最后我尝试了preg_比赛 我需要检测是否有任何字符不是有效的ASCII或ISO 8859-1(mysql中的latin1) 我的结局是: return 0 === preg_match('/[^\x00-\x7F\xA2-\xFF]+/', $value); 但不适用于此表: 本次码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码
return 0 === preg_match('/[^\x00-\x7F\xA2-\xFF]+/', $value);
但不适用于此表:
本次码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码码ÿ
其中一些字符不是有效的拉丁字符,但它们位于拉丁字符集中。像É或À
我猜是因为我的语言环境或encodigs的内部函数设置为UTF8
因为这个ʧ
的计算结果是一个有效的拉丁字符。即使不在字符集中
非常感谢您的帮助
注:
我还对mb_detect_编码、mb_check_编码、mb_convert_编码和iconv
进行了很多测试,但它们都以有效的拉丁字符返回ʧ
我在这里有点迷茫。只检查了一下转换为ISO-8859-1时的错误,但PHP在转换方式和错误发生时的行为方面似乎出了名的松散。PHP看不到字符的“图片”。它只看到代表该代码的底层数字。由于8859-1是一个8位字符集,所有256个字符都有字符,因此任何8位数字在8859中都有效。它的图片可能是一些完全随机的垃圾,但它将是“有效的”8859-1使用“应该做的诀窍”。@MarcB这完全有道理。我没有想到所有8位字符都是有效的iso,即使它们不是我想的字符。。。现在我可以理解检查编码时的“奇怪”(对我来说)行为了。@nwellnhof u修饰符可以工作,但很棘手,因为它会根据区域设置进行更改,注意我不拥有这种配置,可能会有暴露这种配置的风险。