Skip to content

改行またはタブを含む文字列、正規表現及びそれらを含む配列、オブジェクトをシリアライズした時、その結果を正しくデシリアライズできない。 #193

@fukudayasuo

Description

@fukudayasuo

h5.lapi.storage.local.setItem/getItem で改行またはタブを含む値を正しく復元できないのも同様の問題である。
(内部でserialize/deserializeをしているため。)

改行を含む文字列をシリアライズすると、その結果に改行文字が含まれる。
改行文字を含むシリアライズ済み文字をデシリアライズしようとすると、最初の改行文字以降が無視されてしまう。

var str = $('pre').text(); // 改行を含む文字列
var serialized = h5.u.obj.serialize(str);
var result = h5.u.obj.deserialze(serialized); 
// 最初の改行以降が無視された結果になる

配列やオブジェクトの中に改行含む文字列がある場合は、JSON.parseができずにエラーが投げられる。
(FWではオブジェクト、配列にパースするときに$.parseJSON()を使用している。)
($.parseJSON()ではwindow.JSON.parseがある場合はそれを使用している。)

window.JSON.stringifyでは改行文字は"\r\n"に変換して、window.JSON.parseで改行に復元される。シリアライズ/デシリアライズも同様に、シリアライズ時にエスケープするように修正する。

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions