phpのstr_replace関数を使用して、一部のテキストを置き換えています。以下の例。
str_replace("{x+{\$v}}", "{x-{\$v}}", $this->introtext);
str_replace('{x+{\$v}}', '{x-{\$v}}', $this->introtext);
最初のケースではテキストを置き換えますが、2番目のケースでは置き換えません。2つの違いは何ですか?
phpのstr_replace関数を使用して、一部のテキストを置き換えています。以下の例。
str_replace("{x+{\$v}}", "{x-{\$v}}", $this->introtext);
str_replace('{x+{\$v}}', '{x-{\$v}}', $this->introtext);
最初のケースではテキストを置き換えますが、2番目のケースでは置き換えません。2つの違いは何ですか?
と の間には違い'
があり"
ます。\
単一引用符で囲まれた文字列内を取り除きます。
EDIT:明確にするために、二重引用符で囲まれた文字列はいくつかの展開を行います(リンクを参照)が、一重引用符で囲まれた文字列はそうではありません。二重引用符で囲まれた文字列内$
ではエスケープする必要がありますが、単一引用符で囲まれた文字列ではエスケープする必要はありません。\
後者の場合、文字どおり\$
.
ドル記号と中括弧は、二重引用符で囲まれた文字列内では特別な意味を持ちます。$
変数のコンテンツを直接文字列に入れるために使用されます。{}
PHP変数の意味があいまいな場合に備えて、PHP変数をラップするために使用されます。
たとえば"$hello"
、変数の内容を$hello
文字列に"{$hell}o"
入れますが、変数の内容を文字列に入れ$hell
、その後にリテラル文字oを続けます。
一重引用符にはこれがまったくありません(簡単にするために、より複雑な文字列を引用する場合は一般的に推奨されます)。したがって'{$hell}o'
、実際の文字を含む文字列になります{$hell}o
。
置き換えようとしている正確な文字列が少し不明確です。リテラル{x+$v}
を{x-$v}
thenに置き換えるには、次を使用します。
str_replace('{x+$v}', '{x-$v}', $this->introtext);