0

文字列をエコーアウトするときに、渡された文字の一部が失われる 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");
?>
4

3 に答える 3

7

$文字列に一重引用符を使用している場合:

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

そうしないと、PHP は$vhkvdov変数名として使用し、その内容で置き換えようとします。変数が設定されていないと予想されるため、何も起こりません。

文字列に関する PHP リファレンス


:開発中error_reportingにphp.iniに設定します

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 in

于 2013-04-13T16:51:38.447 に答える
3

問題は、PHP 変数の内部文字列を PHP に解釈させる二重引用符を使用していることです。

次の例を検討してください。

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

PHP に文字列の内容を解釈させたくない場合は、代わりに単一引用符を使用してください。

$friend = "foo";
echo 'hello $friend';
// Output: hello $friend
于 2013-04-13T16:53:46.263 に答える
1

これを読んで、なぜこれが起こっているのかを明確にしてください。

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';
于 2013-04-13T16:53:34.373 に答える