php参数返回带换行符的字符串

时间:2017-08-21 08:10:06

标签: php

我有一个PHP脚本,它接受1个参数,例如我需要捕获该参数并执行urlencode

以下是显示问题的示例代码

<?php

$input=$argv[1];
#$input="How are you.\nAre you free?";
echo "$input\n";
$escape_input = urlencode("$input");
echo "$escape_input";

?>
$ php test.php "How are you.\nAre you free?"

输出为How+are+you.%5CnAre+you+free%3F%,这是不正确的,因为新行未正确编码。

但是如果你在代码中对相同的字符串进行硬编码,它就会起作用 正确输出:How+are+you.%0AAre+you+free%3F%

1 个答案:

答案 0 :(得分:2)

问题在于输入代码。正如你所指出的那样

echo urlencode("Hello\nWorld.");

打印Hello%0AWorld.,因为\n被解释为新行字符,如果它在php中的引号内使用,那么\n将替换为新行字符传递给urlencode

当您使用php test.php "How are you.\nAre you free?"执行代码时(比如在bash中),$argv[1]是一个包含反斜杠字符后跟n的字符串。 urlencode对反斜杠进行编码,并按原样保留n

为了使用新行字符运行代码,您应该按 enter 进行换行。

$ php test.php "How are you.
Are you free?"

或者,您也可以手动解释输入中的序列\n,并将其替换为换行符。

$input = str_replace("\\n", "\n", $argv[1]);

请注意,第一个参数,即搜索模式,是字符串\n(反斜杠后跟n),第二个参数,即替换字符串,是新行字符。