我有一个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%
答案 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
),第二个参数,即替换字符串,是新行字符。