我有一个 PHP 脚本,它接受 1 个参数,例如我需要捕获该参数并执行 urlencode
下面是显示问题的示例代码
<?php
$input=$argv[1];
#$input="How are you.nAre you free?";
echo "$inputn";
$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%
问题出在代码的输入上。正如你所指出的
echo urlencode("HellonWorld.");
打印Hello%0AWorld.
,因为如果在 PHP 中的引号内使用n
,则会被解释为换行符,因此n
在传递给urlencode
之前会替换为换行符。
当您使用php test.php "How are you.nAre you free?"
执行代码时(比如说在 bash 中(,$argv[1]
是一个字符串,其中包含反斜杠字符后跟n
。urlencode
对反斜杠进行编码,并按原样保留n
。
为了使用换行符运行代码,您应该在换行符应该的位置按回车键。
$ php test.php "How are you.
Are you free?"
或者,您也可以手动解释输入中的序列n
,并将其替换为换行符。
$input = str_replace("\n", "n", $argv[1]);
请注意,第一个参数(搜索模式(是字符串n
(反斜杠后跟n
(,第二个参数(替换字符串(是换行符。