PHP 参数返回一个带有换行符的字符串



我有一个 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]是一个字符串,其中包含反斜杠字符后跟nurlencode对反斜杠进行编码,并按原样保留n

为了使用换行符运行代码,您应该在换行符应该的位置按回车键

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

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

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

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

最新更新