1
<?php echo ($i % 6 == 5) ? 'style=\"margin-right:0px\"' : ''; ?>

ビューポートに style="" を印刷するだけです。

更新: 文字列内にいるときに二重引用符をエスケープする必要がないのはなぜですか? 二重引用符が単一引用符内にある場合、二重引用符は文字列以外のものと見なされることはありませんか?

前もってありがとう、MEM

4

3 に答える 3

3

文字列内にいるときに二重引用符をエスケープする必要がないのはなぜですか? 二重引用符が単一引用符内にある場合、二重引用符は文字列以外のものと見なされることはありませんか?

一重引用符で囲まれた文字列に関するマニュアル:

リテラルの一重引用符を指定するには、バックスラッシュ (\) でエスケープします。リテラルのバックスラッシュを指定するには、二重にします (\\)。バックスラッシュの他のすべてのインスタンスは、リテラルのバックスラッシュとして扱われます。これは、\r や \n など、慣れ親しんだ他のエスケープ シーケンスが、特別な意味を持つのではなく、文字通り指定されたとおりに出力されることを意味します。

于 2010-11-28T04:24:52.740 に答える
2

その文字列に単一引用符を使用したため、文字列内の'二重引用符をエスケープする必要はありません。"これを次のように置き換えると'style="margin-right:0px"'、問題なく動作するはずです。

PHP が文字列と引用符をより適切に処理する方法を説明するには、 と の違いを知っておくと役に立ち'ます"。でカプセル化された文字列'は、常にそのまま表示されます。\nエスケープ文字 (エスケープされた単一引用符を除く、改行やエスケープされた引用符など) を含め、文字列内の何も解析されません\'。逆に、カプセル化された文字列"は解析されるので、エスケープ文字があれば正しく表示され、文字列内に変数があれば入力されます。例えば、

// Set name variable to my name
$name = "nhinkle";

// Echo hello name with single quotes
echo 'hello {$name}';
// The result will be "hello {$name}"

// Echo hello name with double quotes
echo "hello {$name}";
// The result will be "hello nhinkle"

PHP は何かをエスケープするために文字列をスキャンする必要がなく、文字列の末尾を見つけるだけでよいため、単一引用符を使用する方が処理能力が少なくて済みます。ただし、文字列内のものを解析する必要がある場合は、必ず二重引用符を使用してください。

于 2010-11-28T04:18:12.910 に答える
2

一重引用符内で二重引用符をエスケープする必要はありません。

<?php echo ($i % 6 == 5) ? 'style="margin-right:0px"' : ''; ?>

一重引用符内の一重引用符または二重引用符内の二重引用符のみをエスケープする必要があります。一重引用符で囲まれた文字列内に一重引用符を書きたい場合、その一重引用符は文字列を終了します。

$foo = 'a'b';

PHP は、これを string と見なしa、その後に意味のないb文字列と、終了することのない文字列の開始が続き';ます。これは無効な構文です。

$foo = 'a\'b';

これは string として正しく解析されますa'b。この時点で、引用が通常持つ意味から逃れました。

単一引用符内に二重引用符を使用すると、そのようなあいまいさはありません。一重引用符で囲まれた文字列内の二重引用符は、文字列を終了しません。エスケープが必要な特別な意味はありません。バックスラッシュを含めると、バックスラッシュはそのまま使用されます。

$foo = 'a"b';  // a"b
$foo = 'a\"b'; // a\"b

問題は、出力をどのように見るかだと思います。出力が の場合style=\"…\"、エスケープされた二重引用符により、出力を見ている環境で無効な構文が発生する可能性があります。

于 2010-11-28T04:19:14.497 に答える