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

php参数返回带换行符的字符串,php,Php,我有一个php脚本,它接受一个参数,例如,我需要捕获该参数并进行urlencode 下面是显示问题的示例代码 <?php $input=$argv[1]; #$input="How are you.\nAre you free?"; echo "$input\n"; $escape_input = urlencode("$input"); echo "$escape_input"; ?> 输出将是How+are+you.%5nare+you+free%3F%,这是不正确的,因为

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

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

<?php

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

?>
输出将是
How+are+you.%5nare+you+free%3F%
,这是不正确的,因为新行编码不正确

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

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

echo urlencode("Hello\nWorld.");
打印
Hello%0AWorld.
,因为
\n
如果在php中的引号中使用,则会被解释为新行字符,因此
\n
在传递到
urlencode
之前会被替换为新行字符

当您使用
php test.php“你好。\n您有空吗?”
(在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
),第二个参数,即替换字符串,是新行字符。

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

echo urlencode("Hello\nWorld.");
$input = str_replace("\\n", "\n", $argv[1]);
打印
Hello%0AWorld.
,因为
\n
如果在php中的引号中使用,则会被解释为新行字符,因此
\n
在传递到
urlencode
之前会被替换为新行字符

当您使用
php test.php“你好。\n您有空吗?”
(在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
),第二个参数是替换字符串,它是新行字符。

在您的命令中,
\n
是2个字符,而在PHP代码中它只有1个。我需要从参数传递它,如何将它设为1“这是不正确的,因为新行编码不正确。“--输入字符串中没有换行符<代码>\n不是新行。它是PHP源代码中字符串中新行字符的编码。将换行符传递给脚本,它将正确编码。在您的命令中,
\n
是2个字符,而在PHP代码中它只有1个字符。如何将其设为1,因为我需要从参数“这是不正确的,因为新行未正确编码”中传递它。输入字符串中没有换行符<代码>\n不是新行。它是PHP源代码中字符串中新行字符的编码。将换行符传递给脚本,它将正确地对其进行编码。
$input = str_replace("\\n", "\n", $argv[1]);