2016-08-10 4 views
0

このajax関数で日本語の文字を含むフォームを送信すると、その文字は日本語の形式でサーバーに送信され、データはデータベースに¿として格納されます。japaneseをHTMLエンティティに変換する

var strAction = "/_ajax/save/"+sSavePage+"?action=saveseo&intFolderID="+iFolderID+"&intPageID="+iPageID; 
var frm = $("#frmSmartPage");  
var data = frm.serialize(); 

$.ajax({ 
    type: frm.attr('method'), 
    url: strAction, 
    data: data, 
    success: function (data) { 
     alert('ok'); 
    } 
}); 

同じページで、フォームを送信して送信することもできます。その後、ジャパンの文字は&#<number>形式に変換されます。

<form method="post" target="ajax_save" autocomplete="off" name="frmSmartPage" id="frmSmartPage" action="<%=constBetaPath%>/_ajax/save/pages_save.asp?intPageID=<%=intPageID%>&intFolderID=<%=intFolderID%>&action=save" onSubmit="return validateSave()"> 

私はAJAX呼び出しで&#<number>形式に日本の文字を変換することができることを好むだろうが、今のところ、私はすべての運を持っていたやりなさい。私が出回っ試した

もの:

var data = unescape(encodeURIComponent(frm.serialize())); 
--- 
var data = escape(frm.serialize()); 
--- 
accepts: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' 
--- 
contentType: 'application/x-www-form-urlencoded;' 
--- 
contentType: 'application/x-www-form-urlencoded; charset=UTF-8' 

EDIT:

Htmlのエンコーディング:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 

編集2:

バックエンドのコードは、ISO-8859-1をデコードしています1〜UTF8

アルバロ・ゴンサレスに
'****************************************************************************************************************** 
'' @SDESCRIPTION: Decodes from ISO-8859-1 to UTF8 
'' @PARAM:   - s [string]: your string to be decoded 
'' @RETURN:   [string] decoded string 
'' @DESCRIPTION: Usefull to use when saving special chars from a ISO-8859-1 post to an UTF-8 page, example via AJAX 
'****************************************************************************************************************** 
public function DecodeUTF8(s) 
    dim i 
    dim c 
    dim n 

    s = s + " " 

    i = 1 
    do while i <= len(s) 
    c = asc(mid(s,i,1)) 
    if c and &H80 then 
     n = 1 
     do while i + n < len(s) 
     if (asc(mid(s,i+n,1)) and &HC0) <> &H80 then 
      exit do 
     end if 
     n = n + 1 
     loop 
     if n = 2 and ((c and &HE0) = &HC0) then 
     c = asc(mid(s,i+1,1)) + &H40 * (c and &H01) 
     else 
     c = 191 
     end if 
     s = left(s,i-1) + chr(c) + mid(s,i+n) 
    end if 
    i = i + 1 
    loop 
    DecodeUTF8 = Left(s, Len(s)-1) 
end function 

SOLUTION おかげで、私はsubmitingに使用する一時フォームを作成することで、回避策を作成することができました返信。

var strAction = "/_ajax/save/"+sSavePage+"?action=saveseo&intFolderID="+iFolderID+"&intPageID="+iPageID; 
var newForm = $('<form />'); 
var orginalForm = $("#frmSmartPage"); 

newForm.append(orginalForm.clone().children()); 
newForm.attr('method', 'post'); 
newForm.attr('target', 'ajax_save'); 
newForm.attr('action', strAction); 
newForm.css('display', 'none'); 

orginalForm.parent().append(newForm); 

var target = $("#ajax_save"); 

target.one('load', function() { 
    newForm.remove(); 
}); 

newForm.submit(); 
+1

)文字列がUTF-8であることを考慮?テキストエンコーディングは簡単な単純な概念ですが、純粋な推測では正しいことはありません。 –

+0

@ÁlvaroGonzálezHTMLはiso-8859-1でエンコードされています –

+0

日本語の文字をHTMLエンティティに変換するよう求めていますか?もしそうなら、[この表](http://www.rikai.com/library/kanjitables/kanji_codes.unicode.shtml)をチェックし、[this](http://www.amp-what.com/unicode/search/30a2)、文字のHTMLエンティティを検索します。 – evolutionxbox

答えて

2

あなたは深刻な根本的な問題があります(すでにあなたの手掛かりを与える必要もラテン-1として知られる、)ISO-8859-1文字セットは、西ヨーロッパ言語で使用されるラテン文字のために設計することができています日本語の文字を単にエンコードしないでください。今日の今日の唯一の賢明なエンコーディングの選択肢であり、この種の制限はありませんが、ISO-8859-1はチェーンの弱いリンクであり、すべてがひどく複雑になっています。

さらに悪いことに、私は心配する細部を見つけます。あなたはAJAXを使用して情報を送信しています。AJAX mandates UTF-8以降、jQueryは自動的にUTF-8に変換します。しかし、サーバー側のコードでは、ISO-8859-1が間違っていて、偽の変換が行われます。このコードがすでにProductionにある場合は、既に持っているデータが破損している可能性があります。 UTF-8へ

  1. スイッチのすべて:

    あなたは基本的に2つの選択肢があります。これにより、将来すべてのエンコーディングの問題は解決されますが、現在のコードベースを注意深く移行する必要があります。

  2. ISO-8859-1として日本語をクライアント側コードでエンコードし、サーバー側コードで日本語を正しくデコードする方法を解説します。ありがたいことに、ブラウザはすでにこの問題を認識しています(HTMLはマスター言語なので)、HTMLエンティティを使用することを通常決定します(&#<number>のものです)。ドキュメントエンコーディングあなたが何をする必要があるかこの場合

    のために、サーバー側のコードを変更することです:任意のエンコーディング変換をしないでください

    1. (既にデータがUTF-8である)
    2. デコードHTMLエンティティ(あなたが偶然知っていますか関与行為者(ソースコード、HTML、データベース...)のいずれかのエンコーディングを決定することができますが
+0

"*サーバーサイドコードはUTF8 Ajaxリクエストで* ISO-8859-1と間違っていると思います* ISO-8859-1のエンコーディング*とエンティティー*を持つダウンストリームはそのままの状態で正常に動作しています。 – Bergi

+0

@Bergi HTMLエンティティは、HTMLコンテキストの外では意味がありません。 '€'は明示的に決定しない限り、 '€'と同じではありません。 –

+0

もちろん、唯一の下流はHTMLページだったようです。そうでない場合は、他のチャネルについても適切な解決策を見つける必要があります。 – Bergi

関連する問題