将带撇号的字符串从PHP传递到JavaScript函数
一个简单的问题,我无法找到'正确的'答案。将带撇号的字符串从PHP传递到JavaScript函数
我有一个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>
一切工作正常,除非当我打一个连字符的名称,如“布莱斯D'Arnoud”导致撇号中断HTML。为了解决这个问题,我现在用的是PHP addslashes()
功能,导致下面的代码& 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的不删除转义字符,并在弹出()函数,如果我提醒了名,我看“布莱斯d \'阿诺德·”
function popup(t, name) {
alert(name);
}
任何建议至于我去哪里错了?
首先,如果你没有在你的标记中混合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'));
};
不会转义双引号的工作? (未测试)
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>";
EDIT 2实际上将所有那些$name
可能是清洁剂:
$name = preg_replace("/'/", ''', $results['name']);
echo "<a href=\"javascript:void(0)\" onclick=\"popup(this,'$name')\">$name</a>";
它帮助我很多。 @inhan – Shaddy 2015-12-08 05:32:02
感谢您节省时间!它帮助到我。 – 2017-08-04 08:41:16
有趣......但有没有办法,代码生成有效的HTML,是吗? – 2012-03-05 02:59:27
当然,'data-'属性是HTML5的标准部分。 – Eli 2012-03-05 03:04:58
谢谢。希望避免不得不加载jQuery来做一个简单的onclick调用,但会保留这个解决方案作为我的后备。 – 2012-03-05 03:18:55