在PHP中为JavaScript函数参数转义引号

时间:2014-01-08 15:57:29

标签: javascript php syntax escaping

我无法在PHP中转义引号。 我有一个产品表,每行都有一个onclick函数,产品名称作为参数。

名称包含以英寸为单位的长度,因此名称包含引号。我在字符串周围包裹了一个addslashes()。这会在引号之前添加反斜杠但由于某种原因它似乎没有逃脱角色!

以下是我的代码片段:

<?$desc1 = addslashes($row['Desc1']);?>

<tr class='tableRow' onclick='afterProductSelection("<?=$desc1?>")'>

<td><?=$row['Desc1']?></td>

当我在谷歌浏览器中检查元素时,语法的颜色表明它尚未转义,单击它会给我一个语法错误。

enter image description here

我可能缺少一些简单的东西。希望你能帮忙!

4 个答案:

答案 0 :(得分:4)

有许多不同的情况需要转义字符串。 addslashes()几乎都是错误的答案。

addslashes()函数是PHP早期的一个过时的遗留问题;它不适合任何逃脱。不要使用它。永远。对于任何事情。

在您的特定情况下,由于您是从PHP创建Javascript数据,请使用json_encode()

json_encode()将获取一个PHP变量(无论是字符串,数组,对象还是其他)并将其转换为JSON字符串。 JSON字符串基本上是完全转义的Javascript变量,包括字符串周围的引号等。这就是你需要做的。

答案 1 :(得分:2)

  

addslashes()函数是PHP早期的一个过时的遗留问题;它不适合任何逃脱。不要使用它。永远。为了任何东西。 - Spudley

我认为您正在寻找的功能是htmlentities()

<?=htmlentities($desc1, ENT_QUOTES)?>

http://ca1.php.net/htmlentities

答案 2 :(得分:2)

您正在生成编码为HTML的JavaScript字符串,因此您需要进行两次编码:

答案 3 :(得分:2)

使用json_encode从JavaScript后端输出变量:

<tr onclick='afterProductSelection(<? print json_encode($desc1); ?>)'>

N.B。:对于字符串输出,不需要额外的引号。