为什么在使用php json_encode进行转换时,&符号会成为html代码

时间:2014-05-15 01:05:22

标签: javascript php

我在php中有一个数组,我正在解析为javascript。我的问题是数组中的某些字符串包含&符号,并且它们在javascript中变为&而不是&。这是一个简单的例子来说明我的问题:

<? $titles = json_encode(array("H&M", "Tesco")); ?>

<script>
var titles = <? echo $titles; ?>; 
console.log(titles[0]);
</script>

日志显示:

H&amp;M

3 个答案:

答案 0 :(得分:2)

之所以发生这种情况,是因为HTTP协议如何划分GET或POST事务的元素。这将解决javascript端的问题:

var convertAmpersand = function(str) {
  return str.replace(/&amp;/g, "\&");
};

console.log(convertAmpersand(titles[0]));

答案 1 :(得分:0)

如果这有助于其他人,我正在做类似于你的例子,但是使用jQuery来读取我注入HTML元素的JSON字符串。

正如一些评论中所提到的,PHP没有进行& => &amp;编码。它是在javascript中完成的。解决方案是使用jQuery&#39; .text()而不是.html()

PHP:

<div id="bootstrap"><?= json_encode(array("H&M", "Tesco")) ?></div>

使用Javascript:

$(function () {
  // uses &amp;
  var asHtml = $('#bootstrap').html();
  console.log(asHtml);

  // uses &
  var asText = $('#bootstrap').text();
  console.log(asText);
});

答案 2 :(得分:0)

我在 opencart 中遇到了类似的问题。

$json = array(
   'href' => $this->url->link('product/product', 'product_id=1'),
);
echo json_encode($json);

发生 link 函数故意创建 &amp;。来自源代码:

$url .= '&amp;' . http_build_query($args);

我结束了

str_replace('&amp;','&',$this->url->link('product/product', 'product_id=1'))