如果我想在PHP中发现空格的十六进制等价物,我可以使用bin2hex
:
php > echo var_dump(bin2hex(" "));
string(2) "20"
我也可以从“20”获得空格字符
php > echo var_dump(hex2bin("20"));
string(1) " "
但是存在“可见”空间的Unicode版本:
php > echo var_dump(hex2bin('c2a0'));
string(2) " "
所以,我可以得到一些字符串(例如来自HTTP请求),我无法用眼睛识别出“没有休息空间”。所以,......
$string = preg_replace('~\x{00a0}~siu', ' ', $string);
有没有更好的方法来查找和替换PHP中的所有“类似空格”字符?
答案 0 :(得分:6)
您可以使用Unicode category \p{Zs}
:
Zs
空格分隔符
$string = preg_replace('~\p{Zs}~u', ' ', $string);
\p{Zs}
Unicode类别类将匹配these space-like symbols:
Character Name
U+0020 SPACE
U+00A0 NO-BREAK SPACE
U+1680 OGHAM SPACE MARK
U+2000 EN QUAD
U+2001 EM QUAD
U+2002 EN SPACE
U+2003 EM SPACE
U+2004 THREE-PER-EM SPACE
U+2005 FOUR-PER-EM SPACE
U+2006 SIX-PER-EM SPACE
U+2007 FIGURE SPACE
U+2008 PUNCTUATION SPACE
U+2009 THIN SPACE
U+200A HAIR SPACE
U+202F NARROW NO-BREAK SPACE
U+205F MEDIUM MATHEMATICAL SPACE
U+3000 IDEOGRAPHIC SPACE