2010-03-12 88 views
0

我一直在試圖讓這個工作一段時間,我懷疑有一個簡單的解決方案,我找不到。我的頭感覺像果凍,我會很感激任何幫助。PHP,JavaScript,單引號問題,當從ajax post傳遞給javascript函數的變量

我的主要page.php文件作出。員額()來backend.php並獲取城市的列表,它呼應的形式:

<li onclick="script('$data');">$data</li> 

名單被取出並置於通過頁面html的()。

我的問題發生在$ data中有一個單引號。 backend.php將該變量傳遞給page.php,但是當我運行html()時,它會拋出一個javascript錯誤(在IE中,顯然不是FF);

')' 預計

IE解析單引號和打亂了劇本() - 調用。我一直試圖以不同的方式重建回顯的字符串,在PHP方面和/或JavaScript方面逃避了's,但是徒勞無功。我必須總共查看腳本嗎?

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("'","&#39;",$row['City']); 
    echo "<li onclick=\"script('$city');\">".$city."</li>"; 
} 

回答

2

您需要兩種編碼:一個用於JavaScript的背景和一個對於HTML上下文:

那麼試試這個:

echo '<li onclick="script(' . htmlspecialchars(json_encode($row['City'])) . ')">' . htmlspecialchars($row['City']) . '</li>'; 
+0

你是一個給予較少天賦的男人的上帝:)作品完美,很好的解決方案。 – Mattis 2010-03-12 20:08:27

1

怎麼樣反斜槓它?:

$city = str_replace("'","\'",$row['City']); 
+0

試過了,不認爲它的工作,但我已經翻了很多不同的設置,我不能確定:)雖然Gumbos解決方案雖然不錯。 – Mattis 2010-03-12 20:10:04

2

您能夠打電話script(),然後引用this.innerhtml

<li onclick="script();">$data</li> 

然後在你的JavaScript:

function script() { 
    data = this.innerHTML; 
    // do stuff 
} 
+0

它是'innerHTML'而不是'innerhtml'。 – Gumbo 2010-03-12 16:49:38

1

爲了使您的生活更輕鬆,我會免去使用onclick如果可以的話,包括在頁面的<head>腳本和註冊點擊處理器基於ID /班。更好的是,使用jQuery來做到這一點,但如果你在S.O.附近,你可能已經意識到jQuery了。足夠。

單人/雙人/三人一直逃跑只是不值得。

+0

你可能是對的,我正在發展我發現的例子。在進一步的發展中可能會使它更直觀。 – Mattis 2010-03-12 20:09:18

1

我對法律程序的貢獻,使用您現有的功能和最小的變化。

<li onclick="script(this.innerHTML);">$data</li>