【问题标题】:Issues with PHP echo into a javascriptPHP 回显到 javascript 的问题
【发布时间】:2015-04-16 22:59:45
【问题描述】:

我使用同一行代码在两个位置将链接回显到我的页面上并获得不同的结果。一个在 标签内,另一个在 标签内。下面是两个代码摘录(来自同一个 tpl 文件)和结果:

<a href="<?php echo $links['current_path']['href']; ?>" role="button"><?php echo $btn['text']; ?></a>

结果:

<a href="index.php?route=module/jw/list&token=a4c693a4e38916fc03af23ad4fe17188" role="button">Filter</a>

但是在我的脚本标签中

url = "<?php echo $links['current_path']['href']; ?>"

我的结果是

 url = "index.php?route=module/jw/list&amp;token=a4c693a4e38916fc03af23ad4fe1"

注意路由参数后面的'&'。当我在脚本标签中回显它时,它正在显示 html 代码。我知道我可以在第二种情况下转换它,但我很好奇为什么我需要这样做。为什么相同的 php 命令在源代码的各个部分中使符号回显不同?

【问题讨论】:

  • 您是从源代码还是从 DOM 检查器中获取该 HTML 的?我想您的原始字符串中包含 &amp;amp; 作为 HTML 并且您的 DOM 检查器正在为您简化视图。
  • @pbaldauf — 为什么?它是 HTML 编码的而不是 URL 编码的。
  • @Quentin:我正在使用 DOM 检查器,但是单击链接时可以正常工作,但是 javascript location = url;没有
  • ——这就是问题所在。您的 URL 已经从文本转换为 HTML,因此它在 HTML 属性中可以正常工作,但在 JavaScript 中却不行。处理该问题的最佳方法是转到您从中获取 URL 的任何位置并将其转换为文本。然后仅在您将其插入 HTML 文档时将其转换为 HTML。
  • 昆汀:感谢您帮助我更好地理解为什么会发生这种情况。

标签: javascript php


【解决方案1】:

&amp;amp; 是一个 HTML 实体 - 您的浏览器会解析并显示它。关于解码herehere 的一些类似问题。你试过html_entity_decode():

html_entity_decode — 将所有 HTML 实体转换为其适用的字符

所以

url = "<?php echo html_entity_decode($links['current_path']['href']); ?>"

【讨论】:

  • 是的,这确实有效。我试图理解为什么我需要在 javascript 标签中而不是在标准链接标签中使用它
  • 浏览器/客户端应该如何处理这些元素。引用w3.org/TR/html4/types.html#type-cdata:尽管 STYLE 和 SCRIPT 元素使用 CDATA 作为其数据模型,但对于这些元素,用户代理必须以不同方式处理 CDATA。标记和实体必须被视为原始文本并按原样传递给应用程序。字符序列“”(结束标记打开分隔符)的第一次出现被视为终止元素内容的结尾。在有效文档中,这将是元素的结束标记。
【解决方案2】:

使用php函数html_entity_decode

例子:

<a href="<?php echo html_entity_decode($links['current_path']['href']); ?>" role="button"><?php echo $btn['text']; ?></a>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 2015-04-02
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多