「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@627) [低] [解決]
@627■ (#1986) JSONエンコードの際にエスケープが一切行なわれていない - うぇいく (2012-04-23 15:30) /低 未処理
【症状】どのような症状、現象か?
JSONエンコードの際、文字列に含まれる、改行やTABや「"」や「\」のエスケープが行なわれない。
【再現方法】サンプルソース、再現手順など
------
「ab"cd\e」をJSONエンコードして表示。
------
今は、
"ab"cd\e"
と表示される。このままJSONデコードすると、失敗します。正しくエスケープすると、以下。
"ab\"cd\\e"
【要望】どのような解決が望ましいか?
正しくエスケープを行い、JSONエンコードとJSONデコードを繰り返せばデータが戻るようにしてほしい。
【バージョン】1.5333
【その他】
よく見ると、unit_kabin.pasに謎なコーディングが・・・
--------
  if (p.VType = varStr) then
  begin
    s := hi_str(p);
    s := JReplace(s, '\', '\\');
    s := JReplace(s, #9,  '\t');
    s := JReplace(s, #13, '\r');
    s := JReplace(s, #10, '\n');
    s := JReplace(s, #0,  '\0');
    Result := '"' + hi_str(p) + '"';
    Exit;
  end;
------------
エスケープする振りして、最後にsではなくpから再取得しています。
また、もともと「"」に対するエスケープがすっぱり抜けているようです。こんな感じでしょうか。エスケープと各型を網羅したテストユニットが合ったほうがよいかもしれません。
------------
  if (p.VType = varStr) then
  begin
    s := hi_str(p);
    s := JReplace(s, '\', '\\');
    s := JReplace(s, '"', '\"');
    s := JReplace(s, #8,  '\b');
    s := JReplace(s, #12,  '\f');
    s := JReplace(s, #9,  '\t');
    s := JReplace(s, #13, '\r');
    s := JReplace(s, #10, '\n');
    s := JReplace(s, #0,  '\u0000');
    Result := '"' + s + '"';
    Exit;
  end;
------------

(#1994) 確認しました(5/2 OK) - うぇいく (2012-05-02 23:01) /低 解決
1.5334の更新履歴に含まれていたので確認しました。
対応ありがとうございました。
以下、確認したソースと結果です。
-------
!CR=「{\13}」
!LF=「{\10}」
!FF=「{\12}」
!BS=「{\8}」
!TAB=「{\9}」
「a{CR}{LF}あいう\えお{FF}かき{BS}{BS}くけこ{CR}{LF}{TAB}cd\e」をJSONエンコードして表示。
-----------
"a\r\nあいう\\えお\fかき\b\bくけこ\r\n\tcd\\e"
-----------

(#1986)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能