2012-03-05 70 views
0

一個簡單的問題,我無法找到'正確的'答案。將帶撇號的字符串從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); 
} 

任何建議至於我去哪裏錯了?

回答

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')); 
}; 
+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

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("/'/",'&#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

相關問題