クライアント側のスクリプトは、テキスト入力内のテキストを取得し、それを XML ブロック内に「ラップ」して、MySQL データベースに情報を保存するサーバーに送信します。
入力値をラップする前の最初のステップとして、次のように「&」文字をエスケープします。
var copyright = copyright.replace(/&/g,"&");
結果の XML データ ブロックは、jquery のajax
メソッドを使用してサーバーに送信されます。
var copyright = copyright.replace(/&/g,"&"),
xml = "<request><session>"+session+"</session><space>"+space_id+"</space><view>"+view_id+"</view><copyright>"+copyright+"</copyright></request>",
url = "hidden URL";
$.ajax({
type: "POST",
url: url,
contentType: "text/xml; charset=UTF-8",
dataType: "xml;charset=UTF-8",
data: xml
});
この操作の後、以前にデータベース内に保存されたコンテンツを取得して、Web ページ内に表示する必要があります。
$.ajax({
type: "POST",
url: url,
dataType: 'xml',
data: xmlString,
success: function(xml) {
var XML = $(xml);
// Process the data retrieved
},
error: function(jqXHR, textStatus, errorThrown) {
var XML = $(jqXHR.responseText);
console.log("error: "+textStatus+"\n"+errorThrown);
}
});
アンパサンドが入力フィールドに入力されてから保存された場合、以前に保存された同じコンテンツを表示するページをロードしようとすると、ajax 呼び出しが中断されerror
、次のエラーが発生してイベント ハンドラーが実行されます。
error: parsererror
Error: Invalid XML: <?xml version="1.0" encoding="UTF-8"?><response><target>
<target_id>2095466</target_id>
<plot>20029/13</plot>
<builder>Lemminkäinen</builder>
<housing_form>vm</housing_form>
<block_name></block_name>
<finnish_year>2013</finnish_year>
<target_name>As Oy Helsingin Saukonranta</target_name>
<target_address>Saukonpaadenranta 8</target_address>
<office_space></office_space>
<purpose></purpose>
<reservations></reservations>
<contacts></contacts>
<infoflag>2</infoflag>
<views>
<view>
<view_id>2095468</view_id>
<copyright>B&M</copyright>
</view>
</views>
</target>
<status>OK</status><errormsg></errormsg></response>
私が間違っているのは何ですか?文字を間違ってエスケープしていますか、それとも何か他のものですか?
この質問は重複しているように見えるかもしれませんが、アンパサンド文字が保存される前にエスケープされているため、私にはそうは思えません。エスケープ文字列に追加 (1 つ、次に 2 つ) を追加しようとしamp;
ましたが、結果はまったく同じです。