一个简单的问题,我也找不到'正确'的答案。
我有一个PHP脚本,可以从数据库中读取人名,并将其显示在表中。在每一行中,我将该人的姓名超链接到一个JavaScript函数,该函数显示一个弹出窗口,其中包含该人的姓名作为标题 - PHP代码和生成的html如下:
$name = $results['name'];
echo '<a href="javascript:void(0)" onclick="popup(this, '\' . $name . '\')">' . $name . '</a>';
使用html:
<a href="javascript:void(0)" onclick="popup(this, 'Steve Smith')">Steve Smith</a>
一切正常,除非我点击一个带有连字符的名字,例如“Bryce D'Arnoud”,这会导致撇号打破html。为了解决这个问题,我正在使用PHP addslashes()
函数,从而得到以下代码&amp; HTML:
$name = $results['name'];
echo '<a href="javascript:void(0)" onclick="popup(this, '\' . addslashes($name) . '\')">' . $name . '</a>';
使用html:
<a href="javascript:void(0)" onclick="popup(this, 'Bryce D\'Arnoud')">Bryce D'Arnoud</a>
一切运行正常,但由于某种原因,JavaScript不会删除转义字符,而在popup()函数中,如果我提醒名字,我会看到“Bryce D \'Arnoud”
function popup(t, name) {
alert(name);
}
关于我哪里出错的任何建议?
答案 0 :(得分:4)
首先,如果你没有在标记中混合使用JavaScript,那么生活将变得容易多了。相反,让PHP形成语义标记,并使用JavaScript访问数据:
$name = $results['name'];
echo '<a href="#" class="popup" data-name="' . $name . '">' . $name . '</a>';
然后访问该值(我使用jQuery进行简洁):
$('.popup').click(function(e) {
e.preventDefault();
alert($(this).attr('data-name'));
});
在原生JS中(我认为):
document.getElementsByClassName('popup').onclick = function (e) {
e = e || window.event;
e.preventDefault();
alert(this.getAttribute('data-name'));
};
答案 1 :(得分:3)
不会逃避双引号工作吗? (未经测试)
echo "<a href=\"javascript:void(0)\" onclick=\"popup(this,'$name')\">$name</a>";
编辑:很抱歉错过了这一点。但是,使用preg_replace
将单引号替换为HTML实体可能会这样做。
echo '<a href="javascript:void(0)" onclick="popup(this,\'' . preg_replace("/'/",''',$name) . "')\">$name</a>";
编辑2 事实上,转换$name
中的所有内容可能更加清晰:
$name = preg_replace("/'/", ''', $results['name']);
echo "<a href=\"javascript:void(0)\" onclick=\"popup(this,'$name')\">$name</a>";