4

多くの場合、PHP を作成するときに、次のような HTML を出力します。

echo "<a href="../" title="link title">".$link_text."</a>";

<a>要素の属性で二重引用符をエスケープする必要があるため、明らかにこれは解析されません。バックスラッシュを手動で追加するのではなく、これをすばやく行う正規表現はありますか?

もう1つ-正規表現は、タグの外側の二重引用符をエスケープしないでください(たとえば、$link_text変数を追加した場所.

何か案は?

4

6 に答える 6

13

代わりに一重引用符を使用する必要があります。

echo '<a href="../" title="link title">' . $link_text . '</a>';
于 2009-07-08T10:00:24.247 に答える
8

私が思いつくことができる解決策(逃げることなくではない):

  • 一重引用符

    echo '<a href="../">' . $link_text. '</a>';
    
  • 二重引用符を使用する

    echo "<a href='../'>$link_text</a>";
    
  • Sprintf

    echo sprintf('<a href="../">%s</a>', $link_text);
    
  • ヒアドキュメントを使用する

    echo <<<EOF
    <a href="../">$link_text</a>
    EOF;
    
  • smartyのようなテンプレートエンジンを使用する

  • PHPモードを終了します:

    ?><a href="../"><?php echo $link_text ?></a><?php // other code...
    

ところで、必ず変数で使用htmlspecialchars()して$link_textください。そうしないと、XSSセキュリティホールが発生します。

于 2009-07-08T10:09:36.847 に答える
5

使用(この構文は引用符などを気にしないでください)

echo <<<EOT
<a href="../" title="link title">$link_text</a>
EOT;
于 2009-07-08T10:00:48.520 に答える
3

文字列を作成するのではなく、テンプレートを使用することを強くお勧めします。

生のPHPの場合:

<a href="../" title="link title"><?php echo $link_text; ?></a>
于 2009-07-08T10:04:54.877 に答える
0

使えると思います

http://www.example.com/.../Learning-Tutorials/ACTIVE-USER-ACCOUNT/verify.php?email='.$email.'&hash='.$hash.'

"<a href="//www.example.com/.../Learning-Tutorials/ACTIVE-USER-ACCOUNT/verify.php?email="$email&hash=$hash>Click Here to Active</a>"

それを試してみてください。

于 2014-12-06T09:01:39.240 に答える
0

一重引用符を使用するか、ヒアドキュメントを使用してください。最後の方がいいです。

于 2012-06-26T07:02:23.147 に答える