2013-08-28 35 views
0

假設I型重音字符,例如ASCII 233,成這樣的形式:

enter image description here

然後,我使用此代碼後。關鍵點,據我瞭解:網址編碼不可行與ASCII> 127,所以你必須誘導不同的內容類型。

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" dir="ltr" lang="en"> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> 
    <script type="text/javascript" src="../js/third_party/jquery.js"></script> 
     <script> 
      $(document).ready(function(){ 
       $('#but').click(function(){ 
        var fd = new FormData();  
        fd.append('params', $('#inp').val()); 
        $.ajax({ 
         url: 'http://my-server-address-here', 
         data: fd, 
         dataType: 'json', 
         processData: false, 
         contentType: false, 
         type: 'POST', 
         success: function(data){ 
          alert(data); 
         } 
        }); 
       }); 
      }); 
     </script> 
    </head> 
    <input id="inp"></input> 
    <button id="but">Submit</button> 
</html> 

問題是,鉻仍然似乎破壞了字符,如下所示。這是它甚至到達服務器端腳本之前,但是,從那裏輸出它顯示相同的問題。

enter image description here

我們輸出數據(例如服務器到瀏覽器),這種類型的所有未出現任何問題或特殊邏輯的時間,所以,我認爲它必須能夠讓我的「法國E」現身服務器端沒有任何特殊的翻譯或轉換,除了配置瀏覽器和請求正確,我認爲我沒有做到。任何意見讚賞。

+1

爲什麼有兩個'contentType'鑰匙? –

+0

嘗試'fd.append('params',encodeURIComponent($('#inp')。val()))' – mplungjan

+0

@BradM,我的錯誤,但它不會影響結果。編輯爲僅顯示第二個/虛假值。 – GregT

回答

0

我相信你的例子工作正常。您已經告訴瀏覽器在<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">標記中將此頁面視爲UTF-8,這意味着它將以UTF-8格式提交表單數據。當您將字符作爲http正文的一部分發送(如multipart/form-data)時,百分比編碼與此無關。

您在Chrome的開發人員工具中看到的字符是開發工具將單字符é視爲兩個單字節字符而不是兩個字節的UTF-8字符的結果。您的服務器應該正確地將兩個字節作爲單個字符讀取,而不是像chrome開發工具那樣使用兩個字符。

(我只是測試使用的Node.js服務器的例子,服務器正確解釋的形式身體UTF-8,返回「E」作爲輸入。)

+0

非常感謝您的回覆。開發人員工具在使用urlencoded表單時正確顯示'e',但這可能不相關。我會在服務器端做更多的根。非常感激。 – GregT

0

這工作得很好,有些比你的代碼更簡單

live demo

<!DOCTYPE html> 
<html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-git.js"></script> 
     <script> 
      $(function() { 
       $("#but").click(function(){ 
        var $data = { "params":$("#inp").val()}; 
        $.ajax({ 
         url: "dump.php", 
         data: $data, 
         type: "POST", 
         success: function(data){ 
          $("#result").html(data); 
         } 
        }); 
       }); 
      }); 
     </script> 
    </head> 
    <input id="inp" value="Français - Wikipédia"></input> 
    <button id="but">Submit</button> 
    <div id="result"></div> 
</html> 
+0

因此,似乎多部分/形式數據的東西不是真的......所有這些都會導致GC在調試器中搞砸顯示器,但是在任何情況下都可以覆蓋它。非常感謝,歡呼聲。 – GregT

+0

@GregT如果讚賞並且Johann的回答也是如此,請點擊投票數字上方的^ – mplungjan

相關問題