您好我有简单的分割脚本,我在新行上拆分一个字符串,其中包含许多新行字符。这是代码:
<?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);
然而,分裂计数'\'也是一个角色,我不知道为什么。但爆炸是正确的。由于拆分已被弃用,我对此没有做过多少研究。
感谢所有让我知道拆分已被弃用的人。
答案 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。