我在php中有一个数组,我正在解析为javascript。我的问题是数组中的某些字符串包含&符号,并且它们在javascript中变为&
而不是&
。这是一个简单的例子来说明我的问题:
<? $titles = json_encode(array("H&M", "Tesco")); ?>
<script>
var titles = <? echo $titles; ?>;
console.log(titles[0]);
</script>
日志显示:
H&M
答案 0 :(得分:2)
之所以发生这种情况,是因为HTTP协议如何划分GET或POST事务的元素。这将解决javascript端的问题:
var convertAmpersand = function(str) {
return str.replace(/&/g, "\&");
};
console.log(convertAmpersand(titles[0]));
答案 1 :(得分:0)
如果这有助于其他人,我正在做类似于你的例子,但是使用jQuery来读取我注入HTML元素的JSON字符串。
正如一些评论中所提到的,PHP没有进行& => &
编码。它是在javascript中完成的。解决方案是使用jQuery&#39; .text()
而不是.html()
:
PHP:
<div id="bootstrap"><?= json_encode(array("H&M", "Tesco")) ?></div>
使用Javascript:
$(function () {
// uses &
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
函数故意创建 &
。来自源代码:
$url .= '&' . http_build_query($args);
我结束了
str_replace('&','&',$this->url->link('product/product', 'product_id=1'))