从字符串中修剪空白ASCII字符"194"

bil*_*oah 11 php whitespace character-encoding

最近遇到了一个非常奇怪的问题,我的数据库包含看似正常的空白字符的字符串,但实际上是其他东西.

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

"TEST "
Run Code Online (Sandbox Code Playgroud)

来找我:

"TEST "
Run Code Online (Sandbox Code Playgroud)

结果是.所以我复制并粘贴字符串中的最后一个字符,然后:

echo ord(' ');
194
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ker 16

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

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

要用正常空间替换NO-BREAK空间,您应该能够执行以下操作:

$string = str_replace("\u{c2a0}", " ", $string);
Run Code Online (Sandbox Code Playgroud)

要么

$string = str_replace("\u{c2a0}", "", $string);
Run Code Online (Sandbox Code Playgroud)

删除它们


Jor*_*sen 6

您可以尝试:

PHP修剪

$foo = "TEST ";
$foo = trim($foo);
Run Code Online (Sandbox Code Playgroud)

PHP str_replace

$foo = "TEST ";
$foo = str_replace(chr(194), '', $foo);
Run Code Online (Sandbox Code Playgroud)

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

PHP preg_replace

$foo = "TEST ";
$foo = preg_replace('#(^\s+|\s+$)#', '', $foo);
Run Code Online (Sandbox Code Playgroud)

或(我不确定它是否会运作良好)

$foo = "TEST ";
$foo = preg_replace('#[\xC2\xA0]#', '', $foo);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。唯一有效的是`chr(194).chr(160)`。那到底是什么? (2认同)
  • [PHP的`chr()`](http://php.net/manual/en/function.chr.php)返回ASCII代码的字符.您可以查看[ASCII表格](http://www.asciitable.com/).如果你想获得一个字符的ASCII码你可以使用[`ord()`](http://php.net/manual/en/function.ord.php) (2认同)

Ale*_*lex 5

有同样的问题。解决了它

trim($str, ' ' . chr(194) . chr(160))
Run Code Online (Sandbox Code Playgroud)