我一直试图让它工作一段时间,我怀疑有一个简单的解决方案,我找不到。我的头像果冻一样,我真的很感激任何帮助。
我的主要page.php为backend.php创建了一个.post()并以下列形式提取了一个与之相呼应的城市列表:
<li onclick="script('$data');">$data</li>
通过.html()获取列表并将其放到页面上。
当$ data中包含单引号时,我的问题就出现了。 backend.php将变量传递给page.php,但是当我运行html()时会抛出一个javascript错误(在IE中,显然不是FF);
')'预计
IE解析单引号并搞砸脚本() - 调用。我一直在尝试以不同的方式重建回显的字符串,在php端和/或javascript端转义,但是徒劳无功。我是否必须查看该脚本?
page.php文件
$.post("backend.php", {q: ""+str+""}, function(data) {
if(data.length >0) {
$('#results').html(data);
}
backend.php
while ($row = $q->fetch()) {
$city = $row['City'];
// $city = addslashes($row['City']);
// $city = str_replace("'","'",$row['City']);
echo "<li onclick=\"script('$city');\">".$city."</li>";
}
答案 0 :(得分:2)
您需要两种编码:一种用于JavaScript上下文,另一种用于HTML上下文:
json_encode
用于编码JavaScript和htmlspecialchars
用于HTML部分。所以试试这个:
echo '<li onclick="script(' . htmlspecialchars(json_encode($row['City'])) . ')">' . htmlspecialchars($row['City']) . '</li>';
答案 1 :(得分:2)
您可以拨打script()
,然后引用this.innerhtml
。
<li onclick="script();">$data</li>
然后在你的javascript中:
function script() {
data = this.innerHTML;
// do stuff
}
答案 2 :(得分:1)
反斜杠逃避它怎么样?:
$city = str_replace("'","\'",$row['City']);
答案 3 :(得分:1)
为了让您的生活更轻松,如果可以,请尽量使用onclick
并在页面的<head>
中包含脚本,并根据ID / class注册点击处理程序。更好的是,使用jQuery来做到这一点,但如果你身处S.O.,你可能已经知道了jQuery。够了。
单人/双人/三人逃脱一直是不值得的。
答案 4 :(得分:1)
我对会议的贡献,以最小的改变使用你现有的功能。
<li onclick="script(this.innerHTML);">$data</li>