显然没有mb_trim
in the mb_* family,所以我正在尝试为自己实现一个。
我最近在评论中发现了这个正则表达式php.net:
/(^\s+)|(\s+$)/u
所以,我会通过以下方式实现它:
function multibyte_trim($str)
{
if (!function_exists("mb_trim") || !extension_loaded("mbstring")) {
return preg_replace("/(^\s+)|(\s+$)/u", "", $str);
} else {
return mb_trim($str);
}
}
正则表达式对我来说似乎是正确的,但我对正则表达式非常菜鸟。这样能有效去除any字符串开头/结尾的 Unicode 空格?
标准trim
函数会修剪一些空格和类似空格的字符。这些被定义为 ASCII 字符,这意味着某些特定的bytes from 0
to 0100 0000
.
ProperUTF-8 输入永远不会包含由字节组成的多字节字符0xxx xxxx
。中的所有字节properUTF-8 多字节字符开头为1xxx xxxx
.
这意味着在一个properUTF-8 序列,字节0xxx xxxx
只能引用单字节字符。 PHP 的trim
因此,函数永远不会删除“半个字符”assuming你有一个properUTF-8 序列。 (非常非常小心improperUTF-8 序列.)
The \s
ASCII 正则表达式将大部分匹配相同的字符trim
.
The preg
函数与/u
修改器仅适用于UTF-8编码的正则表达式, and /\s/u
也匹配 UTF8nbsp。这种不间断空格的行为是使用它的唯一优势。
如果您想替换其他非 ASCII 兼容编码中的空格字符,这两种方法都不起作用。
换句话说,如果您尝试修剪 ASCII 兼容字符串中的常用空格,只需使用trim
。使用时/\s/u
请注意文本中 nbsp 的含义。
小心:
$s1 = html_entity_decode(" Hello   "); // the NBSP
$s2 = "
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)