转义PHP输出的HTML属性的双引号

时间:2009-07-08 09:55:43

标签: php html regex bbedit

通常在编写PHP时我会输出一些像这样的HTML -

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

显然这不会解析,因为我需要在<a>元素的属性中转义双引号。是否有正则表达式可以快速执行此操作而不是手动添加反斜杠?

另一件事 - 正则表达式不应该在标记之外转义双引号(例如我添加$link_text变量的地方。

有什么想法吗?

6 个答案:

答案 0 :(得分:13)

您应该只使用单引号:

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

答案 1 :(得分:8)

我能提出的解决方案(并非没有逃脱):

  • 单引号

    echo '<a href="../">' . $link_text. '</a>';
    
  • 使用双引号

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

    echo sprintf('<a href="../">%s</a>', $link_text);
    
  • 使用HEREDOC

    echo <<<EOF
    <a href="../">$link_text</a>
    EOF;
    
  • 使用smarty

  • 等模板引擎
  • 退出 PHP模式

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

顺便说一句,请务必在htmlspecialchars()变量上使用$link_text,否则您将拥有XSS安全漏洞。

答案 2 :(得分:5)

使用(此语法不用担心引号等)

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

答案 3 :(得分:3)

我强烈建议使用模板而不是尝试构建字符串。

在原始PHP中:

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

答案 4 :(得分:0)

使用单引号或使用heredoc。我更喜欢最后一个。

答案 5 :(得分: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>"

试一试。