2009-11-23 49 views
1

這是幾個星期前我問過的一個問題的後續。爲AJAX請求掩蓋&

以下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
     "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<title>Test</title> 
</head> 
<body> 
<a onclick="start_ajax_request('url.php&key1=val1&key2=val2&key3=val3')">Test</a> 
</body> 
</html> 

在W3C驗證爲HTML 4.01不驗證過渡,錯,只要我能看到。它抱怨實體並希望每個符號都轉換爲&amp;。但是,在給定的上下文中,將會是錯誤的,因爲我的Ajax請求需要簡單的&符號,並且在饋入&amp;時會中斷。

在這個例子中是否有一種方法來屏蔽/轉義&符號,以便它仍然是一個有效的URL,它將通過Ajax請求並關閉驗證器?

+0

我甚至不明白爲什麼驗證會抱怨說* * - 這是一個簡單的函數中的字符串。因此驗證程序無法知道該字符串在語義上是什麼意思 - 它應該是一個URL。你是否在驗證器中測試了這個例子? – Franz 2009-11-23 20:04:03

+0

您可能需要從腳本文件或腳本塊中添加單擊事件以防止發生此情況。 – 2009-11-23 20:05:17

+0

@Franz:我更新了這個例子,自己嘗試一下。我看不出有什麼問題。 @Josh:是的,但我真的很想避免這種情況:) – 2009-11-23 20:12:46

回答

1

嘗試使用JS escape()函數,並通過將符號爲%26同樣的方式傳遞我相信你看到的%通過空間20

希望工程

+0

這對我來說是這樣的:urlencode()在PHP中的URL,並添加到JS的unescape()。不完美,但爲我工作,歡呼。 – 2009-11-23 20:14:28

1

您應該使用encodeURIComponent() function發送URL字符串,然後在接收器中對其進行解碼。如果您使用的是PHP,您需要這樣做:

utf8_decode(rawurldecode(str)); 
+0

我不認爲這是重點,因爲問題不在於URI組件被強制識別爲URI,而是URI被驗證程序拒絕。如我錯了請糾正我。 – 2009-11-23 20:15:15

2

或者,您可以在JavaScript中指定onclick。這樣更好,因爲它可以讓你的標記更清晰。這是一個jQuery解決方案。

$('a').bind('click', function() { 
    start_ajax_request('url.php?key1=val1&key2=val2&key3=val3'); 
}); 
+0

好點,但在我目前的情況下不可行。仍然+1 – 2009-11-23 20:07:35

+0

嘗試添加cdata塊。請參閱http://stackoverflow.com/questions/355043/how-do-i-escape-an-ampersand-in-a-javascript-string-so-that-the-page-will-validat – mveerman 2009-11-23 20:11:34

+0

我不認爲cdata將在onclick中工作 - 或者它會嗎? – 2009-11-23 20:15:45

0

我不是專家,我不知道我的回答是否與您的問題完全相關。

我有一個類似的問題,但在相反的方向,我注意到,當我創建一個onclick事件,通過ajax以json格式接收到參數,解析並放置在文檔中,當我查看源代碼時,像

<a href="#" onclick="qString('blah.php', 'ipp=2&amp;ord=0');">blah</a> 

但這並沒有停止工作的應用程序,我從未有過的問題之前,因爲我不使用&作爲參數值的一部分,如果該值是用戶輸入我使用encodeURIComponent方法來對值進行編碼。

因此,我繼續和discarted任何json解析問題或ut8相關的問題,那是當我意識到,當使用HTML內的JavaScript有& amp;而不是&其實是正確的。

所以在我的情況下,我想了一會兒並不好,W3C valitador可以。

嘗試:

<html> 
<head> 
<title>Test</title> 
<script language="javascript"> 
    function foo(url) { 
     alert(url.indexOf('&')); 
     alert(url.indexOf('&amp;')); 
     return false; 
    } 
</script> 
</head> 
<body> 
<a href="#" onclick="foo('url.php?key1=val1&amp;key2=val2&amp;key3=val3');">Test</a> 
</body> 
</html>