1

最近、Joomlaプロジェクトで多くのエラーが発生し、(クラスコードで)次のようなものを見つけました...

return "<span class='...

また

echo "<h3 id='...

それ以外の

return "<span class=\"...
echo "<h3 id=\"...

これには、引用符で囲まれた変数が何度も含まれていますが、それでも私のブラウザには一重引用符で囲まれていることがわかります。これらを調べて変更する前に、他の人が何を言わなければならないかを見たかった. 私のプロジェクトはhttp://dev.thediabetesnetwork.comにあります。

これを調べたところ、多くの矛盾する情報が見つかりました。そのため、最新の PHP/ブラウザー構成についての議論を再開し、他の詳細を見落としていないかどうかを確認します。

4

4 に答える 4

5

ブラウザは両方を受け入れるため、どちらかを先に選択する深い理由はありません。PHP の観点からは、文字列を二重引用符で囲み、変数置換を使用できるため、単一引用符を使用した方がわずかに読みやすくなります。自分を比較する

"<a href='$url'>Foo</a>"
"<a href=\"$url\">Foo</a>"
'<a href="' . $url . '">Foo</a>'

別の解決策は、コンテンツを手動で置き換えることです。たとえば、

sprintf('<a href="%s">Foo</a>', $url);

またはヒアドキュメント

echo <<<HTML
<a href="$url">Foo</a>
HTML;

現在のコンテキストに最も適したものを選択します(読みやすさに関して)。

于 2012-08-06T17:48:57.337 に答える
5

文字列内のすべての二重引用符を でエスケープしなくても、読みやすくなります\

文字列式内の変数を出力する必要がある場合は、二重引用符を使用する必要があります。HTML を二重引用符で囲んで出力する場合は、'または\"HTML 属性を使用して囲むことができます。PHP コードがよりクリーンになるため、前者が推奨されます。

HTML で一重引用符を使用したくない場合は、すべての引用符をエスケープするか、ヒアドキュメント構文を使用するか、次のように変数を文字列に連結できます。

echo '<div class="test">' . $var . '</div>';
于 2012-08-06T17:49:28.177 に答える
1

文字列を評価する必要がない場合 (変数が含まれている場合など) は、二重引用符を使用する必要はありません。実際、二重引用符を使用すると文字列が評価されるため、単一引用符を使用して連結するよりも効率が低下します。

さらに、HTML タグ内で二重引用符を使用するのが慣習であるため、次のようにします。

return '<span class="test">' . $var . '</span>';

私の意見では、Joomla のコーディングは非常に不十分であり、あなたが投稿したものはその一例にすぎません。

上記のように、この方法のもう 1 つの利点は、コード ハイライターと IED を使用すると、「静的な」文字列と変数を簡単に区別できることです。

于 2012-08-06T17:51:05.897 に答える
1

二重引用符と単一引用符は、php では機能が異なります。

変数や配列を二重引用符で文字列に入れることはできますが、一重引用符ではできません。

どちらも HTML 仕様で受け入れられます。実際、スペースがない場合は、引用符さえありません。ほとんどの人は、php を二重引用符で囲むことを好みます。これにより、バックスラッシュがないため、コードと読みやすさを損なうことなく変数を使用できます。

return "<span class='foo'>$foo</span>";
return "<span class=\"foo\">$foo</span>";
return '<span class="foo">'.$foo.'</span>';
return '<span class=\'foo\'>'.$foo.'</span>';

すべて機能しますが、ほとんどの場合、最初のものが最も読みやすく、入力しやすいです。

PHP の文字列、二重引用符、一重引用符、ヒアドキュメント、および nowdoc 構文については、次の php のドキュメントですべて読むことができます: http://php.net/manual/en/language.types.string.php

echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;

長い複数行の文字列の開始区切りと終了区切りを選択できるヒアドキュメント構文の例です。Nowdoc はヒアドキュメントと同じですが、一重引用符のように変数を文字列に入れることはできません。

于 2012-08-06T17:52:23.957 に答える