簡體   English   中英

轉義PHP輸出的HTML屬性的雙引號

[英]Escape double quotes of HTML attributes output by PHP

通常在編寫PHP時我會輸出一些像這樣的HTML -

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

顯然這不會解析,因為我需要在<a>元素的屬性中轉義雙引號。 是否有正則表達式會快速執行此操作而不是手動添加反斜杠?

另一件事 - 正則表達式不應該在標記之外轉義雙引號(例如我附加$link_text變量的地方)。

有任何想法嗎?

你應該只使用單引號:

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

我能提出的解決方案(並非沒有逃脫):

  • 單引號

     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... 

順便說一句,一定要在$link_text變量上使用htmlspecialchars() ,否則你將有一個XSS安全漏洞。

使用(這種語法不用擔心引號等)

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

我強烈建議使用模板而不是嘗試構建字符串。

在原始PHP中:

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

使用單引號或使用heredoc 我更喜歡最后一個。

我想你可以用

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>"

試試吧。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM