php参数返回带换行符的字符串
我有一个php脚本,它接受一个参数,例如,我需要捕获该参数并进行urlencode 下面是显示问题的示例代码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
$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]);