从字符串中修剪空格 ASCII 字符“194”

2022-08-30 21:45:02

最近遇到了一个非常奇怪的问题,我的数据库包含的字符串似乎是正常的空格字符,但实际上是另一回事。

例如,应用于字符串:trim()

"TEST "

正在得到我:

"TEST "

结果。因此,我复制并粘贴字符串中的最后一个字符,然后:

echo ord(' ');
194

194?根据 ASCII 表,应该是 .所以我现在只是感到困惑。为什么这个角色看起来是空格,失败时我怎么能像这样?trim()trim()


答案 1

它更可能是一个双字节序列,它是 NO-BREAK 空格代码点(相当于 HTML 中的实体)的 UTF-8 编码。194160 

它真的不是一个空间,即使它看起来像一个空间。(例如,你会看到它不会自动换行。\s 的正则表达式匹配会匹配它,但与空格的简单比较不会匹配;也不会删除它。trim()

要将 NO-BREAK 空格替换为普通空格,您应该能够执行如下操作:

$string = str_replace("\u{c2a0}", " ", $string);

$string = str_replace("\u{c2a0}", "", $string);

以删除它们


答案 2

你可以试试 :

PHP 修剪

$foo = "TEST ";
$foo = trim($foo);

菲律宾比索 str_replace

$foo = "TEST ";
$foo = str_replace(chr(194), '', $foo);

重要提示:您可以尝试使用或chr(194).chr(160)'\u00A0'

菲律宾比索 preg_replace

$foo = "TEST ";
$foo = preg_replace('#(^\s+|\s+$)#', '', $foo);

或(我不确定它是否会很好地工作)

$foo = "TEST ";
$foo = preg_replace('#[\xC2\xA0]#', '', $foo);

推荐