【问题标题】:How to encode a URL as javascript string in PHP-generated HTML?如何在 PHP 生成的 HTML 中将 URL 编码为 javascript 字符串?
【发布时间】:2009-10-06 17:21:28
【问题描述】:

鉴于此 PHP 代码:

<a onclick="javascript:window.location.href='<?php echo $url;?>'"

如果 $url 中有 ' 怎么办?

我尝试使用json_encode($url),但它无法处理这个问题。

【问题讨论】:

  • 你为什么要使用这个&lt;a onclick="javascript:window.location.href=…"?为什么不简单地&lt;a href="…"
  • 如果用户没有启用 JS 并且你没有设置 href,它不会去任何地方仅供参考。
  • 因为这是一个人为的例子。我实际上是在 div 上使用它。
  • @Misier:你试过我发布的解决方案了吗?
  • 看起来像硬编码,有没有更优雅的方法?

标签: php javascript html


【解决方案1】:

json_encode 可以工作。你只需要以正确的方式使用它:

<a onclick="javascript:window.location.href=<?php echo htmlspecialchars(json_encode($url)); ?>">

这将起作用,因为json_encode 已经返回了一个带引号的 JavaScript 表达式。并且需要htmlspecialchars 来转义可能的 HTML 元字符。

【讨论】:

  • @meder:别问我,问 OP。
  • htmlspecialchars 会将内部双引号编码为&amp;quot;,所以没问题。另外,我们可以丢掉无意义的“javascript:”标签吗?
  • 正如 bobince 已经说过的,htmlspecialchars 函数将使用&amp;quot; 编码双引号。并且属性值内的&amp;quot; 是合法的,将被解释为双引号字符。所以title="&amp;quot;foo&amp;quot;" 将被评估为属性值"foo"(带双引号)。
  • @Gumbo:不,问题是json_encode('abc') 返回"abc"包括引号字符)。 htmlspecialchars 然后将其编码为 &amp;quot;abc&amp;quot;,但问题是他一开始就不希望引号出现。
  • @Misier:属性声明中的&amp;quot; 被解释为"。就像任何其他字符引用被解释为它所代表的字符一样。 “有些作者使用字符实体引用“”对双引号 (") 的实例进行编码,因为该字符可用于分隔属性值。” (见w3.org/TR/html4/charset.html#h-5.3)并且属性声明"location.href=&amp;quot;…&amp;quot;"被解释为location.href="…"
猜你喜欢
  • 2020-08-07
  • 2016-07-15
  • 2020-11-25
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
相关资源
最近更新 更多