如果我想在PHP中发现空格的十六进制等效,我可以使用bin2hex:
php > echo var_dump(bin2hex(" "));
string(2) "20"
Run Code Online (Sandbox Code Playgroud)
我也可以从"20"获得空间角色
php > echo var_dump(hex2bin("20"));
string(1) " "
Run Code Online (Sandbox Code Playgroud)
但是存在"可见"空间的Unicode版本:
php > echo var_dump(hex2bin('c2a0'));
string(2) " "
Run Code Online (Sandbox Code Playgroud)
所以,我可以得到一些字符串(例如来自HTTP请求),我无法用眼睛识别出"没有休息空间".所以......
$string = preg_replace('~\x{00a0}~siu', ' ', $string);
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来查找和替换PHP中的所有"空格"字符?
您可以使用Unicode类别\p{Zs}:
Zs空间分隔符
$string = preg_replace('~\p{Zs}~u', ' ', $string);
Run Code Online (Sandbox Code Playgroud)
在\p{Zs}Unicode的类别类将匹配这些空间类符号:
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
Run Code Online (Sandbox Code Playgroud)