将带撇号的字符串从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')); 
}; 
+0

有趣......但有没有办法,代码生成有效的HTML,是吗? – 2012-03-05 02:59:27

+0

当然,'data-'属性是HTML5的标准部分。 – Eli 2012-03-05 03:04:58

+0

谢谢。希望避免不得不加载jQuery来做一个简单的onclick调用,但会保留这个解决方案作为我的后备。 – 2012-03-05 03:18:55

不会转义双引号的工作? (未测试)

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("/'/",'&#39;',$name) . "')\">$name</a>"; 

EDIT 2实际上将所有那些$name可能是清洁剂:

$name = preg_replace("/'/", '&#39;', $results['name']); 
echo "<a href=\"javascript:void(0)\" onclick=\"popup(this,'$name')\">$name</a>"; 
+0

它帮助我很多。 @inhan – Shaddy 2015-12-08 05:32:02

+0

感谢您节省时间!它帮助到我。 – 2017-08-04 08:41:16