2017-01-16

GAE Python AJAX Javascript escape unescape innerHTML

2017-0116 GAE Python AJAX Javascript escape unescape innerHTML

キーワードのとおり、

GAE
Python
AJAX
Javascript
escape
unescape
InnerHTML

これらの話、ハマったのでmemo

最初に結論

document.getElementById('AAA').value

これを使うべきだ、フィールドがたくさんあると、面倒くさいけど。

Pythonで、シングルコーテーションや、ダブルコーテーション、「’」「”」

これらを、エスケープするには、

cgi.escape(AAA)

簡単。

これで、エスケープして、GAEのCloud Datasotreとかに保存はできる

一旦、保存したデータをHTMLの普通の表示にはそのままアンエスケープしなくても表示されるが、HTMLの<input>タグに使うと、表示されないとゆうか、
エラーとなる。正しく表示されない。

なので、いろいろ試した

decode('unicode_escape')

とか

これらのページもいろいろ参考にした


easy_install /Users/tom/Downloads/cgi.unescape-0.0.2-py2.5.egg

easy_install、これ関係ないけど


encode decode やはりこれを読め

javascript escape unescape または、これで検索 unescape input javascript


innerHTMLと、textContentをテストしてみると、違いがわかる

指定したサイトから文字列を正規表現で抜き出すpythonスクリプト encode decode escape unescape 参考にする




innerHTMLと、textContentをテストしてみると、違いがわかるとか。

どれも、参考になったが、

結果、うまくいかない

AJAXを使って、Datasoreのデータ、innerHTMLで表示させるのはだめで

フィールドごとに、inputのタグにidをつけて、valueで、入れる

こんな感じ

$.ajax({
   url: '/target_sample',
   type: 'post',
   dataType: 'json',
   contentType: 'application/json; charset=utf-8',
   data: JSON.stringify(json_data),
   success: function(from_python){

       document.getElementById(AAA).innerHTML = from_python.main;
       document.getElementById(BBB).value = from_python.Name;

   }

これが結論。

エスケープされたデータをHTMLのinputでAJAXの場合、

「valueを使う」

そんで、コマンドラインで、こんなのもテストした

echo '\u30e6\u30cb\u30b3\u30fc\u30c9' | python -c 'from sys import stdin; print stdin.readline().decode("unicode-escape")'
ユニコード

echo '\ud842\udfb7\u91ce\u5bb6' | python -c 'from sys import stdin; print stdin.readline().decode("unicode-escape")'
𠮷野家

echo '1234¥'567890' | python -c 'from sys import stdin; print stdin.readline().decode("unicode-escape")'

aaa = '\ud842\udfb7\u91ce\u5bb6'
print aaa.decode("unicode-escape")

aaa = 'abcdefg'
print aaa.decode("unicode-escape")

aaa = 'abc\"defg'
print aaa.decode("unicode-escape")

以上

0 件のコメント: