我需要使用正则表达式在我的php脚本中处理字符串。但是有一个问题 - 不同的字符串有不同的编码。如果string只包含ascii符号,mb_detect_encoding
函数将返回'ASCII'。但是,如果字符串包含俄语符号,例如mb_detect_encoding
返回'UTF-8'。我想,手动检查每个字符串的编码并不是一个好主意。
所以问题是 - 对ascii字符串使用preg_replace(使用unicode修饰符)是否正确?为ascii和utf-8字符串编写代码preg_replace ("/[^_a-z]/u","",$string);
是正确的吗?
答案 0 :(得分:2)
如果两个选项是“UTF-8”或“ASCII”,那就不会有问题,但事实并非如此。
如果PHP不使用UTF-8,它使用ISO-8859-1,它不是ASCII(它是ASCII的超集,前127个字符。它是ASCII的超集。有些字符,例如瑞典语å
,ä
和ö
可以用ISO-8859-1和Unicode表示,具有不同的代码点!我认为这对于preg_ *函数来说并不重要所以它可能不适用于你的问题,但在使用不同的编码时请记住这一点。
你应该真的,真的尝试知道你的字符串所在的字符集,没有mb_detect_encoding的魔力(mb_detect_encoding不是保证,只是一个很好的猜测)。例如,通过HTTP获取的字符串确实具有在HTTP标头中指定的字符集。
答案 1 :(得分:0)
是的,你总是可以使用Unicode修饰符,它不会影响结果和性能。
答案 2 :(得分:0)
7位ASCII字符集以UTF-8编码相同。如果你有一个ASCII字符串,你应该能够在其上使用PREG“u”修饰符。
但是,如果你有一个“补充”的8位ASCII字符集,如ISO-8859-1,Windows-1252或HP-Roman8,那么最左边的位设置为开启的字符(值x80-xff)不会被编码在UTF-8中也是如此,使用PREG“u”修饰符是不合适的。