在各种各样的空白区域爆炸?

时间:2013-05-01 23:57:02

标签: php

我有一个格式如下的数组:

Array
(
    [1] => 
Status   Name               DisplayName                           
    [2] => 
------   ----               -----------                           
    [3] => 
Running  ADWS               Active Directory Web Services         
)

没有0值的键,因为在显示数组之前未设置此键,此数组是从文本文件生成的:

$File = utf8_encode(file_get_contents("Services.txt"));

现在,让我们在这个数组中取第三个键:

    [3] => 
Running  ADWS               Active Directory Web Services   

我如何在标签空间爆炸,所以我得到:

array
(
   [1] => Running
   [2] => ADWS
   [3] => Active Directory Web Services
)

我目前正在白色空间爆炸,产生错误的输出......我怎么会这样做?


使用正则表达式我得到以下内容:

 preg_split('/\s+/', $String);




Array
(
[0] => Array
    (
        [0] => 
        [1] => Running
        [2] => 
        [3] => ADWS
        [4] => 
        [5] => 
        [6] => 
        [7] => 
        [8] => 
        [9] => 
        [10] => 
        [11] => 
        [12] => 
        [13] => 
        [14] => 
        [15] => 
        [16] => 
        [17] => 
        [18] => Active
        [19] => Directory
        [20] => Web
        [21] => Services
        [22] => 
        [23] => 
        [24] => 
        [25] => 
        [26] => 
        [27] => 
        [28] => 
        [29] => 
        [30] => 
    )

使用trim后跟explode(" ",$String);或上面发布的正则表达式,返回类似的结果,但使用20个键而不是30个


使用发布的答案,我有以下内容:

[0] => Array
        (
            [0] => 
Running  ADWS               Active Directory Web Services         
        )

这不是预期的

2 个答案:

答案 0 :(得分:2)

使用preg_split和正则表达式/\s+/

对我有用
<?php
$s = 'Running  ADWS               Active Directory Web Services   ';
var_dump(preg_split('/\s+/', $s));
var_dump(preg_split('/\s+/', trim($s)));

产生以下输出:

array(7) {
  [0]=>
  string(7) "Running"
  [1]=>
  string(4) "ADWS"
  [2]=>
  string(6) "Active"
  [3]=>
  string(9) "Directory"
  [4]=>
  string(3) "Web"
  [5]=>
  string(8) "Services"
  [6]=>
  string(0) ""
}
array(6) {
  [0]=>
  string(7) "Running"
  [1]=>
  string(4) "ADWS"
  [2]=>
  string(6) "Active"
  [3]=>
  string(9) "Directory"
  [4]=>
  string(3) "Web"
  [5]=>
  string(8) "Services"
}

Example on codepad

更新

您提供的信息肯定有很多帮助。它由PowerShell生成的事实已经让我意识到可能存在的问题,而且您提供的链接还允许我查看实际的Services.txt文件,这进一步证明了我的想法:

Services.txt文件使用UTF-16编码。 UTF-16是一种多字节字符串格式,与UTF-8不兼容。所以你的utf8_encode什么都不做,因为你根本不看UTF-8内容。相反,您需要查看php multibyte字符串(因为PHP不支持本机unicode字符串)。

为了方便起见,最好的选择是将文本转换为单字节字符串,例如UTF-8。您可以使用mb_convert_encoding执行此操作。因此,不要在文件中的文本上调用utf8_encode,而是执行此操作:

$File = mb_convert_encoding(file_get_contents('Services.txt'), 'utf-8', 'utf-16');

然后它应该有用。

答案 1 :(得分:0)

http://php.net/manual/en/function.explode.php

$arr = explode ( "\t", $file[3] );

请注意使用双引号,因为:

http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.double

  

如果字符串用双引号(“)括起来,PHP将解释   更多特殊字符的转义序列:

     

\ t水平制表符(ASCII中的HT或0x09(9))