2010-12-22 28 views
0

我有一個JQuery腳本,將表單字段的內容發佈到一個簡單的servlet。當我在表單字段中放置中文字符(在utf8中)並使用JQuery .ajax()方法發佈後,服務器將字符視爲問號(歡迎進入智慧的十年被看作是?????????? ?在服務器上)。JQuery發佈UTF8字符不起作用的內容

$.ajax({ url: '/url-on-server', type: 'POST', data: 'action=SEND&'+ $('#text-field').val()), success: function(){}, dataType: 'json' }

我曾考察與螢火蟲和Liveheaders的要求,他們看的權利...

Content-Type text/plain; charset=UTF-8

我相信當我更改HTML它不是一個服務器端的東西B/C表單發佈沒有JQuery腳本它很好。我可以在服務器端看到中文字符,而不用改變任何東西。

另一個線索..

當我使用JQuery $就()方法後的形式。這是該請求是什麼樣子的LiveHeaders ...

action=SEND&msg=%E6%AC%A2%E8%BF%8E%E8%BF%9B%E5%85%A5%E6%99%BA%E6%85%A7%E7%9A%84%E5%8D%81%E5%B9%B4

然而,當我發帖的形式傳統的web1.0的方式,這是我在現場看到標題。

action=SEND&msg=%26%2327426%3B%26%2336814%3B%26%2336827%3B%26%2320837%3B%26%2326234%3B%26%2324935%3B%26%2330340%3B%26%2321313%3B%26%2324180%3B

正如你可以看到它似乎編碼方式不同的參數,但我一直沒能到谷歌的解釋還是有辦法解決這個問題。

在此先感謝您的幫助。

回答

0

第一:

action=SEND&msg=%E6%AC%A2%E8%BF%8E%E8%BF%9B%E5%85%A5%E6%99%BA%E6%85%A7%E7%9A%84%E5%8D%81%E5%B9%B4 

...是該字符串的URL轉義形式:

action=SEND&msg=歡迎進入智慧的十年 

第二:

action=SEND&msg=%26%2327426%3B%26%2336814%3B%26%2336827%3B%26%2320837%3B%26%2326234%3B%26%2324935%3B%26%2330340%3B%26%2321313%3B%26%2324180%3B 

...是URL UTF-8字符串轉義形式:

action=SEND&msg=欢迎进入智慧的十年 

這些HTML實體,我推測(我沒有選中)是你的亞洲人物。然而,我並不認爲在x-www-form-urlencoded的東西中發送HTML實體是有效的 - 應該使用該字符本身,所以我很驚訝你看到了這一點。在一個快速測試中,將您的亞洲字符串提交到http://www.opinionatedgeek.com/dotnet/tools/base64decode/(我可以找到第一個POST表單),我得到了這個例子,而不是第二個。你確定第二個是什麼被傳送? (我會用Wireshark檢查)什麼瀏覽器,表單是如何構建的等等?