1

我有一个 php 页面,当用户将产品添加到购物车时,我会在该页面上显示 jQuery 警报。警报中显示的消息是来自存储所有语言元素的 php 页面的变量。

$cartaddeditem='The product was added to your cart.\r\n You can view your <a href=\'cart.php?action=show\'>shopping cart</a> or click OK to continue shopping';

然后,在页面上:

<body onload="jAlert('success', '<?=$cartaddeditem?>', '<?=$minicart?>');" <? } >

问题是由于 $cartaddeditem var 中的引号导致警报无法触发,并且我在 firebug 中收到错误消息:

Error: missing ) after argument list
Line: 1, Column: 22
Source Code:
jAlert('success', The product was added to your cart.\r\n You can view your <a href=\

如何转义 jQuery 消息字符串中的引号?我尝试了几种带有双引号和单引号、一两个反斜杠的转义类型,但没有任何效果。

4

2 回答 2

3

尝试使用双引号来引用您的 HTML 属性。

$cartaddeditem = 'The product was added to your cart.\r\n You can view your <a href="cart.php?action=show">shopping cart</a> or click OK to continue shopping';

我还可以建议不要添加onload属性$(document).ready(而是使用吗?

$(function(){
    jAlert('success', '<?=$cartaddeditem?>', '<?=$minicart?>');
});

更新:您还可以json_encode用来确保引号不会发生冲突。 json_encode也适用于字符串,它输出一个用双引号括起来的字符串(所以不要在参数周围添加引号)。

$(function(){
    jAlert('success', <?=json_encode($cartaddeditem)?>, <?=json_encode($minicart)?>);
});
于 2012-05-25T13:48:41.063 回答
2

正确转义您的 PHP 输出:

<body onload="jAlert('success', 
  <?php echo json_encode($cartaddeditem); ?>, 
  <?php echo json_encode($minicart); ?>);" <? } >

更新

因为它写在标签属性中,所以双引号不起作用(感谢 Rocket)!

所以你要么必须希望addslashes就足够了:

<body onload="jAlert('success', 
  '<?php echo addslashes($cartaddeditem); ?>', 
  '<?php echo addslashes($minicart); ?>');" <? } >

或者你按照火箭在他的回答中描述的那样做。

更新 2

顺便说一句,您应该将 PHP 字符串更改为双引号,以便将其\r\n评估为换行符:

$cartaddeditem = "The product was added to your cart.\r\n You can view your <a href='cart.php?action=show'>shopping cart</a> or click OK to continue shopping";
于 2012-05-25T13:51:18.073 回答