PHP では、二重引用符で囲まれた文字列は、それに含まれる変数に対して自動的に解析されますが、単一引用符で囲まれた文字列は解析されません。したがって:
$myVar = 21;
echo "myVar: $myVar"
これにより、次のテキストが出力されます。myVar: 21
一方:
$myVar = 21;
echo 'myVar: $myVar'
これにより、次のテキストが出力されます。myVar: $myVar
コードの問題の 1 つは、HTML では要素の属性の値を単一引用符ではなく二重引用符で囲む必要があることです。一部のブラウザーがこのフォームを受け入れる (または引用符をまったく受け入れない) ことは知っていますが、これは正しい方法ではありません。
あなたが望むものを正しく達成するためのさまざまな方法があります。
方法 1: 二重引用符で囲まれた文字列をエスケープする:
$myVar = 21;
echo "<div id=\"$myVar\"></div>";
これはかなり洗練されていない解決策かもしれませんが、うまくいきます。
方法 2: 一重引用符 (または二重引用符) で囲まれた文字列連結を使用する:
$myVar = 21;
echo '<div id="' . $myVar . '"></div>';
必要に応じて、関数呼び出しやその他の PHP コードを使用できるため、これは IMO よりも優れたソリューションを提供します。
警告:
$myVar
内容が不明な場合(つまり、ユーザーが入力する場合)、HTML コードに直接配置することは、クロスサイト スクリプティング (XSS) の形でセキュリティ上の脆弱性になることに注意してください。ユーザーが次のように入力したとします。
lol"><script>alert('XSS!');</script></div><div id="lol2
これにより、結果の HTML コードに次の内容が含まれます。
<div id="lol"><script>alert('XSS!');</script></div><div id="lol2"></div>
これは無害な例にすぎませんが、攻撃者は同じ手法を簡単に使用して、ユーザーの Cookie を盗むことができます (そのユーザーとしてログインしているふりをするため)。ここでのメッセージは、変数の内容が 100% 確実でない場合は、HTML コードに直接挿入しないでください。代わりに、 を呼び出しますhtmlspecialchars($myVar)
。これは次のように変換されます。
$myVar = $_POST['whatever'];
echo '<div id="' . htmlspecialchars($myVar) . '"></div>';