2012-11-11 34 views
0

我會告訴代碼爲大部分的主要部分是無關緊要的:丟失)後的參數列表

$url = $row['url']; 
    echo "<div id='anything'><img id='$url' src='$cover' alt='$title' onclick='myFunction($url)'>"; 

以及JavaScript函數:

function myFunction(something) { 
alert (something); 
} 

我收到以下錯誤螢火蟲:

missing) after argument list 
[Break On This Error] 
    myFunction(http://anything.com/anything... 
-------------------^ 

我相對較新的JavaScript,但我可以告訴它顯然不允許從網址「:」。但是,我無法更改或更改ID,因爲我需要提醒圖像的確切ID。

我已經在不使用PHP的情況下以不同的格式創建了這個工作,所以我認爲它存在問題所在的地方?

+0

String!=隨機字符序列。你確實需要這些引號。 – 2012-11-11 13:16:09

回答

4

這樣做:

$escapedString = json_encode($url); 
echo "<div id='anything'><img id='$url' src='$cover' alt='$title' onclick='myFunction($escapedString)'>"; 

T.J.克勞德是正確的,你可以看看這個以瞭解更多信息:

What is the correct way to escape text in JSON responses?

爲什麼我的第一個解決方案不正確的(即使它看起來與1的情況下工作)?

閱讀:http://kunststube.net/escapism/

echo "<div id='anything'><img id='$url' src='$cover' alt='$title' onclick='myFunction(\"$url\")'>"; 

你基本上需要打印各地傳遞到myFunction的通話值雙引號:

onclick='myFunction(\"$url\")' 

+0

如果URL恰好包含其他特殊字符?反斜槓,例如? –

+0

哦該死的,我不知道爲什麼我沒有嘗試。感謝,這是有道理的,它的作品! – iyop45

+0

該URL可以包含任何可以在URL中的內容,但我無法真正阻止該內容。 – iyop45

2

這是因爲你ar Ë做這樣的事情:

myFunction(http://anything.com) 

功能參數需要引號或雙人間引號內的字符串參數的情況下被封閉:

myFunction("http://anything.com") 

所以你的迴音應該是這樣的:

"<div id='anything'><img id='$url' src='$cover' alt='$title' onclick='myFunction(\"$url\")'>" 

你也應該考慮到$url不必包含有效的字符,所以你應該添加一些編碼/轉義(考慮XSS)。

0

您必須使用encodeURI(uri)功能:

"<div id='anything'><img id='$url' src='$cover' alt='$title' onclick='myFunction(encodeURI(\'$url\'))'>"; 
+0

'encodeURI'與轉義JavaScript字符串沒有任何關係。 –

+0

我不知道爲什麼,但encodeURI使一些URL無效,例如http://www.thedoowopjukebox.com/oct08/Flamingos%20-%20Golden%20Teardrops%20%28Rare%20Echo%20Version%29.mp3去http://www.thedoowopjukebox.com/oct08/Flamingos%2520-%2520Golden%2520Teardrops%2520%28Rare%2520Echo%2520Version%29.mp3 – iyop45

+0

@ user1:原因很簡單:它不是您使用的工具這個工作。 –

5

的URL必須是一個字符串,但你只是輸出字符串的內容。

可能只是在其他地方建議引號,但這至多是一個不完整的解決方案。

幸運的是,PHP給你一個更好的答案:json_encode結合(在你的情況)與htmlspecialchars。這是一個函數,(除其他外)將正確地包裝一個字符串,以便您可以在JavaScript代碼中使用它。所以:

$escapedUrl = htmlspecialchars(json_encode($url)); 

然後

...onclick='myFunction($escapedUrl)'... 

json_encode是爲編碼文本JSON,但由於JSON是JavaScript的文字符號的一個子集,並json_encode很樂意返回一個有效的,正確轉義JavaScript字符串。 ...

您還需要htmlspecialchars,因爲您要將您生成的JavaScript代碼輸入到onclick屬性中,並且HTML文本中的所有HTML屬性(甚至是(例如)&必須是&amp;等。

+0

@clentfort不,當json_encoding字符串時,會得到帶引號的字符串。 – Stegrex