2012-08-08 104 views
1

今天,我有修剪功能非常奇怪的问题。 这是我的代码。 =并且结果为124. Trim函数对此字符串不起作用??!PHP - 修剪不适用于空白?

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

复制&粘贴不能使用此代码。 我不知道什么是空白?但修剪无法剥离:|

您可以测试这个代码在这里:

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

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

+1

输出0,如我所料。我怀疑你的问题在别处。 – rdlowrey 2012-08-08 04:37:02

+0

你在'$ s'中有空白字符吗?还是空间集合? – 2012-08-08 04:37:17

+0

抱歉,您可以复制并粘贴此代码。这个网站自动替换为普通的空白区域:( – TomSawyer 2012-08-08 04:38:07

回答

8

当我看着你的t.txt时,$ s字符串不仅仅是空格。在Hex中,它读取20(空格)和C2和A0字符的混合。你需要丢失这些C2和A0字符。

它们可能不显示在屏幕上,但它们不是空格。这里是我的什么返回

Screen Capture

可能的编码文件中的7位ASCII也将揭示问题嗤之以鼻。

要清理它,只需选择$ s中的所有文本,将其删除,然后点击空格键以获取正确数量的空格。或者使用str_repeat('',134)来执行相同的操作。检查编辑器的字符集。

+0

你先生!是真棒!给予好评!给出一个想法...为什么我们需要十六进制编辑器;) – Karma 2012-08-08 04:58:40

+0

看起来unicode C2A0是一个'没有破坏空间'。 – Vatev 2012-08-08 04:59:40

+0

很多tks。如何将所有未看到的字符转换为带有PHP的空白字符? – TomSawyer 2012-08-08 05:02:38

0

厂这里:

[email protected]:~$ php -a 
Interactive shell 

php > $s = '                     '; 
php > $s = trim($s); 
php > echo strlen($s);exit(); 
0 
[email protected]:~$ 

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

+0

你可以在这里测试我的代码,不能复制和粘贴这些空白区域 http:// 70.38.18.62/t.php 代码: http:// 70.38。 18.62/t.txt – TomSawyer 2012-08-08 04:43:50

+0

我剪切并粘贴到上面的东西,你在这两个网址中有什么不同 – 2012-08-08 04:44:39

+0

你不能复制和粘贴运行t.php代码返回124:| – TomSawyer 2012-08-08 04:46:28

0

由于PHP DOCStrim();没有第二paramenter函数转义

" " (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变量这个人物之一。其他人不可见,但不在列表中。