はじめに
エンコードした値をparseメソッドで連想配列に戻す際にSyntaxErrorが出て、解決に時間がかかったので備忘録として記事を書こうと思いました。何かアドバイスがあればコメントよろしくお願いします。
やりたかったこと
phpのコントローラーでjsonエンコードした値をアサイン
↓
tplファイルのscriptタグの中で受け取る
↓
JSON.parseメソッドでデコードし連想配列に戻す
出たエラー
JSON.parseメソッドでデコードした時にSyntaxError
原因
JSON.parseメソッドは解析する文字に特殊文字が入っていたのが原因。
phpでは、controllersでアサインする時にクロスサイトスクリプティング(XSS)対策で特殊文字に変換されるらしい。今回は「""」が「"」に変換されていました。
解決方法
特殊文字が原因なので、アサインする時のエスケープ処理を無効化すればいいので、
JSON.parse('{{デコードする値 nofilter}}');
でエラーがでなくなりました。
nofilterを記述することで、HTMLをそのまま出力することができる。
他にもreplaceメソッドで特殊文字を置き換える方法でも解決できるみたい。