4

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

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

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

另一件事 - 正则表达式不应该在标签之外转义双引号(例如,我在其中附加了$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>";
    
  • 冲刺

    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 安全漏洞。

于 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

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

于 2012-06-26T07:02:23.147 回答
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 回答