php函数参数未保留传入的完整字符串

时间:2013-04-13 16:50:11

标签: php function-parameter texttrimming

我有一个PHP函数,在回显一个字符串时,正在丢失一些传递给它的字符。有什么理由会发生这种情况吗?

我通过:$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");
?>

3 个答案:

答案 0 :(得分:7)

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

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

否则PHP会尝试使用$vhkvdov作为变量名称并将其替换为其内容,因为我预期变量未设置,这将是什么

PHP reference on strings


注意:在开发过程中,我会将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

答案 1 :(得分:3)

问题在于您使用双引号,这使PHP解释PHP变量的内部字符串。

考虑以下示例:

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

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

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

答案 2 :(得分:1)

阅读本文以帮助澄清为什么会发生这种情况:

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

具体做法是:

  

当用双引号或heredoc,变量指定字符串时   在其中解析。

这是您的代码发生的事情:

  

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

以下是一个例子:

<?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';