我无法在PHP中转义引号。 我有一个产品表,每行都有一个onclick函数,产品名称作为参数。
名称包含以英寸为单位的长度,因此名称包含引号。我在字符串周围包裹了一个addslashes()
。这会在引号之前添加反斜杠但由于某种原因它似乎没有逃脱角色!
以下是我的代码片段:
<?$desc1 = addslashes($row['Desc1']);?>
<tr class='tableRow' onclick='afterProductSelection("<?=$desc1?>")'>
<td><?=$row['Desc1']?></td>
当我在谷歌浏览器中检查元素时,语法的颜色表明它尚未转义,单击它会给我一个语法错误。
我可能缺少一些简单的东西。希望你能帮忙!
答案 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)?>
答案 2 :(得分:2)
您正在生成编码为HTML的JavaScript字符串,因此您需要进行两次编码:
答案 3 :(得分:2)
使用json_encode
从JavaScript后端输出变量:
<tr onclick='afterProductSelection(<? print json_encode($desc1); ?>)'>
N.B。:对于字符串输出,不需要额外的引号。