【问题标题】:PHP - Trim doesn't work with white space?PHP - 修剪不适用于空白?
【发布时间】:2012-08-08 04:33:53
【问题描述】:

今天,我对修剪功能有一个非常奇怪的问题。 这是我的代码。 = 结果是 124。 修剪功能不适用于此字符串??!

$s = '                                                                                  ';
$s = trim($s);
echo strlen($s);exit();

复制和粘贴不适用于此代码。 不知道什么是空白?但是 trim 无法剥离它:|

你可以在这里测试这段代码:

测试: http://70.38.18.62/t.php

您可以在那里复制空格和代码: http://jsbin.com/ukunuq/1/edit

【问题讨论】:

  • 输出 0,正如我所期望的那样。我怀疑您的问题出在其他地方。
  • $s 中有空格字符还是空格集合?
  • 抱歉,您可以复制粘贴此代码。此站点自动替换为正常空白 :(

标签: php trim


【解决方案1】:

当我查看您的 t.txt 时,$s 字符串不仅仅是空格。在十六进制中,它读取 20(空格)和 C2 和 A0 字符的混合。你需要丢掉那些 C2 和 A0 字符。

它们可能不会显示在屏幕上,但它们不是空格。这是我对返回的内容的嗅探

可能以 7 位 ASCII 编码文件也会揭示问题。

要清理它,只需选择 $s 中的所有文本,删除它,然后按空格键以获得正确数量的空格。或者使用 str_repeat(' ', 134) 来做同样的事情。检查编辑器的字符集。

【讨论】:

  • 你先生!是真棒!投票!考虑一下...为什么我们需要十六进制编辑器;)
  • 很多tks。如何使用 PHP 将所有看不见的字符转换为空白字符?
  • @TomSawyer 只需删除整行并重新输入即可。或者在 PHP 中使用 preg_replace() 或 str_replace() 来做到这一点。例如$s = str_replace(array("\xC2", "\xA0"), "", $s);或 preg_replace 在一系列十六进制字符上(如果可能有更多)。
  • @KarmicDice 感谢您的补充!
  • @Robbie 很多 tks。我是那种像空白一样看不见的角色?我正在使用 tinymce,该字符串就是它的结果。
【解决方案2】:

在这里工作:

marc@panic:~$ php -a
Interactive shell

php > $s = '                                                                                  ';
php > $s = trim($s);
php > echo strlen($s);exit();
0
marc@panic:~$ 

PHP 5.3.10-1ubuntu3.2。不知道你从哪里得到124。原始未修剪 $s 的 strlen 对我来说是 82。

【讨论】:

  • 你可以在这里测试我的代码。无法复制和粘贴这些空白 http://70.38.18.62/t.php 代码:http://70.38.18.62/t.txt
  • 我剪切并粘贴了您上面的内容。这两个网址中的内容没有什么不同。
  • 你可以在那里复制php代码jsbin.com/ukunuq/1/edit。 100% 无法使用 TRIM
  • t.php 只有你的脚本的输出。没有什么可运行的,因为它只是脚本的结果。 t.txt 在你的字符串中只有 82 个字符,不管你怎么眯着眼睛看它。
  • 好的,我剪切并粘贴了你的 jsbin 链接。结果仍然为 0,原始 $s 的长度为 82。无论问题是什么,它都不是标准 PHP,所以请检查您的安装是否正确,以及无论您的源代码文件有什么,它都是真正的空格,而不是一些伪装成空格的时髦 unicode 字符。
【解决方案3】:

由于PHP DOCS trim(); 函数没有第二个参数转义

" " (ASCII 32 (0x20)), an ordinary space.
"\t" (ASCII 9 (0x09)), a tab.
"\n" (ASCII 10 (0x0A)), a new line (line feed).
"\r" (ASCII 13 (0x0D)), a carriage return.
"\0" (ASCII 0 (0x00)), the NUL-byte.
"\x0B" (ASCII 11 (0x0B)), a vertical tab.

所以$s 变量中只有一个字符。其他不可见但不在列表中。

【讨论】:

    猜你喜欢
    • 2010-11-09
    • 1970-01-01
    • 2018-08-26
    • 2017-03-16
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    相关资源
    最近更新 更多