これが私の文字列です。
{
'user': {
'name': 'abc',
'fx': {
'message': {
'color': 'red'
},
'user': {
'color': 'blue'
}
}
},
'timestamp': '2013-10-04T08: 10: 41+0100',
'message': 'I'mABC..',
'nanotime': '19993363098581330'
}
ここでは、メッセージにシングルクォーテーションマークが含まれていますが、これはJSONで使用されるクォーテーションと同じです。私が行っているのは、メッセージのようなユーザーの入力から文字列を埋めることです。そのため、コードを壊してしまうような特殊なシナリオをエスケープする必要があります。しかし、文字列の置き換え以外に、これらをエスケープしても、HTMLが正しいメッセージに処理を戻すことができるようにする方法はありますか?
JSONの文字列は、specsによるとダブルクオートにしなければならないので、'
をエスケープする必要はありません。
JSONの文字列の中に特殊な文字を使わなければならない場合は、``文字を使ってエスケープすることができます。
JSONで使われる特殊文字の一覧はこちらをご覧ください。
\b Backspace (ascii code 08)
\f Form feed (ascii code 0C)
\n New line
\r Carriage return
\t Tab
\" Double quote
\\ Backslash character
しかし、たとえ仕様に全く反するものであっても、作者は \'
を使うことができます。
これは悪いことです。 笑
新しい読者のために、json文字列には常にダブルクォーテーションを使用してください。
誰もが '
で囲まれた文字列リテラルの '
をどうやってエスケープするかについて話しています。ここにはもっと大きな問題があります。それは、単一引用符で囲まれた文字列リテラルは有効なJSONではないということです。JSONはJavaScriptをベースにしていますが、同じものではありません。JavaScriptのコード内でオブジェクトリテラルを書いているのであれば問題ありませんが、実際にJSONを必要としているのであれば、"
を使う必要があります。
二重引用符で囲まれた文字列では、'
をエスケープする必要はありません。(また、文字列の中にリテラルの"
を入れたい場合は、"
を使います)。