PHP函数参数没有保留传入的完整字符串


php function parameter is not retaining full string passed in

我有一个PHP函数,在回显出一个字符串,正在失去一些字符传递在它。为什么会发生这种事?

I pass: $vhkvdov#jqlydk#p*_L#1qrlws|ufqh#KWLZ#1hwdgsX

返回:#jqlydk#p*_L#1qrlws|ufqh#KWLZ#1hwdgsX

这是我的PHP代码:
<?php
function display($str) {
    echo $str;
}
display("$vhkvdov#jqlydk#p*_L#1qrlws|ufqh#KWLZ#1hwdgsX");
?>

如果您的字符串中有$,请使用单引号:

display('$vhkvdov#jqlydk#p*_L#1qrlws|ufqh#KWLZ#1hwdgsX');

否则PHP将尝试使用$vhkvdov作为变量名并将其替换为其内容,什么都没有,因为我期望变量没有设置

PHP对字符串的引用


注意:在开发过程中,我将php.ini中的error_reporting设置为

error_reporting=E_ALL | E_NOTICE;

display_errors=On

log_errors=On
error_log=PATH/TO/YOUR/LOG.file ; make sure this is writable by the web server

,请参阅中的错误信息:

PHP注意:未定义变量:vhkvdov

问题是您使用了双引号,这使得PHP为PHP变量解释内部字符串。

考虑下面的例子:

$friend = "foo";
echo "hello $friend";
// Output: hello foo

如果不希望PHP解释字符串内容,请使用单引号

$friend = "foo";
echo 'hello $friend';
// Output: hello $friend

读一读这段话,帮助你弄清楚为什么会发生这种情况:

http://php.net/manual/en/language.types.string.php

专:

当一个字符串用双引号或带引号指定时,变量

你的代码是这样的:

如果遇到美元符号($),解析器将贪婪地取为尽可能多的标记来组成一个有效的变量名。附上的变量名中的花括号来显式指定名字。

下面是一个例子:

<?php
$juice = "apple";
echo "He drank some $juice juice.".PHP_EOL;
// Invalid. "s" is a valid character for a variable name, but the variable is $juice.
echo "He drank some juice made of $juices.";
?>
上面的示例将输出:
他喝了一些苹果汁。

他喝了一些用……做的果汁

当您使用单引号时,您将避免这个问题,因为字符串按字面意思取:

// Outputs: This will not expand: 'n a newline
echo 'This will not expand: 'n a newline';
// Outputs: Variables do not $expand $either
echo 'Variables do not $expand $either';