拆分功能不适用于新线路

时间:2012-01-05 15:20:01

标签: php

您好我有简单的分割脚本,我在新行上拆分一个字符串,其中包含许多新行字符。这是代码:

<?php
   $string = $argv[1]; // CASE 1: COMMAND LINE ARGUMENT.
   echo "String is : $string\n";
   //$string = 'Hello Shakir\nOkay Shakir\nHow are you ?'; //CASE2: SINGLE QUOTE.
   $string = "Hello Shakir\nOkay Shakir\nHow are you ?"; //CASE 3: DOUBLE QUOTE.
   $lines = array();
   $lines = split("\n", $string);

   foreach ( $lines as $line ) {
      echo "line is : $line\n";
      //var_dump($line); 
   } 
?>

当我在代码中使用CASE 3时它工作正常,但是当我使用CASE1或CASE 2时它不起作用(只有CASE 3工作正常)。有人可以对此有所了解吗?

这是我在命令行(linux机器)上运行的方法:

php my_script.php "Hello Shakir\nOkay Shakir\nHow are you ?"

在这种情况下,当我打印$ argv [1]时,它会打印整个字符串,但它会将其视为CASE2(带单引号)。

更新:

你们许多人都说过问题的原因而不是答案。但是,了解原因帮助我解决了问题。所以答案是:

答案:

不使用双引号(“\ n”)中的\ n,而是使用单引号('\ n'):

$lines = split('\n', $string);

OR

$lines = explode('\n', $string);

然而,分裂计数'\'也是一个角色,我不知道为什么。但爆炸是正确的。由于拆分已被弃用,我对此没有做过多少研究。

感谢所有让我知道拆分已被弃用的人。

4 个答案:

答案 0 :(得分:4)

CASE1和CASE2由于一个简单的原因不起作用,因为\n被评估为文字\n而不是换行符。

只有带双引号的CASE3会将\n评估为换行符。

此外,不推荐使用函数split()。请尝试使用explode()

答案 1 :(得分:1)

那是因为'\ n'不输出新行,而不是作为新行的interpritate,所以在CMD中你也不会传递新行;

此外,不推荐使用split(),请使用explode();

答案 2 :(得分:1)

使用单引号''和双引号“”之间的最大区别在于字符串内部的自动替换。

使用“”将允许替换变量和使用转义序列,而''不支持此功能。

$name = 'Mathieu';
$case1 = "Hi this is $name speaking\nPleased to meet you!";
echo $case1;

//Will result in 
Hi this is Mathieu speaking
Pleased to meet you!

使用单引号时会产生:

$name = 'Mathieu';
$case1 = 'Hi this is $name speaking\nPleased to meet you!';
echo $case1;

//Will result in 
Hi this is $name speaking\nPleased to meet you!

所有可能的转义序列都是:

\n Line feed (dec 13)
\r Carriage return (dec 10)
\t Tab (dec 8)

相对于你关于换行的问题,请注意\ n,\ n,\ r \ n是根据操作系统使用不同的组合,来自Windows操作系统的信息通常是\ r \ n,而linux只有\ ñ。 MacOS曾经或仍然只有\ r \ n我认为,不确定。

答案 3 :(得分:0)

Single-quoted strings不应该扩展所有的转义字符串,如/ n。