6

次のような JSON 文字列を含む rel 属性を持つ要素があります。

rel='{"id":"#id#","name":"#name#"}'

次に、JavaScript コードで、$.parseJSONこのデータを解析するために使用します。これは正しく機能します -nameアポストロフィが含まれる場合を除きます。jsStringFormatすべての一重引用符をエスケープされた一重引用符に置き換えるコールドフュージョンなどを使用してみましreplaceたが、正しい解決策にたどり着けないようです。これはおそらく単純なことだと思いますが、json を使用してアポストロピ/一重引用符で値を正しく渡すコードを取得するにはどうすればよいですか?

このコードは機能しますが、保存したいアポストロフィを削除します。

rel='{"id":"#id#","name":"#replace(name,"'","","all")#"}'

これは動作しません:

rel='{"id":"#id#","name":"#replace(name,"'","\'","all")#"}'

次のようなこともありません。

rel='{"id":"#id#","name":"#replace(name,"'","\\\'","all")#"}'

または:

rel='{"id":"#id#","name":"#replace(name,"'",""","all")#"}'

または:

rel='{"id":"#id#","name":"#jsStringFormat(name)#"}'
4

3 に答える 3

4

たくさん遊んだ後、ついにこれが機能するようになりました:)

rel='{"id":"#id#","name":"#replace(name,"'","&##39;","all")#"}'
于 2012-08-27T20:10:27.680 に答える
2

あなたが抱えている問題は、2 つのコンテキストで文字列を扱っているためです。文字列が両方で安全であることを確認する必要があります。

JSON 文字列:

コードを JSON 安全にする最も簡単な方法は、SerializeJSON 関数を使用して ColdFusion オブジェクトを有効な JSON に変換することです。

したがって、コードは次のようになります。

rel='#SerializeJSON({"id"=Variables.id,"name"=Variables.name})#'

HTML 属性文字列:

対処する必要がある次のコンテキストは、文字列を有効な html 属性値にすることです。

ColdFusion 10 では、これをEncodeForHTMLAttribute 関数で処理します。

rel='#EncodeForHTMLAttribute(SerializeJSON({"id"=Variables.id,"name"=Variables.name}))#'

CF10 より前のものを使用している場合は、ESAPI エンコーダーを使用するのが最善の策です。(これは、ColdFusion の一部のバージョンのパッチに含まれていました)

rel='#CreateObject("java", "org.owasp.esapi.ESAPI").encoder().encodeForHTMLAttribute(SerializeJSON({"id"=Variables.id,"name"=Variables.name}))#'

私は個人的にヘルパー CFC を使用して CF9 の ESAPI エンコーダーを処理しているため、CreateObject は 1 回だけ呼び出され、そのメソッドのすべての使用で再利用されます。

于 2012-08-28T11:47:04.450 に答える
1

JavaScript では、文字列内の一重引用符を\.

ただし、HTML では、属性に二重引用符を実際に使用し、二重引用符をエスケープする必要があります。次に例を示します。

rel="{"id":"#id#","name":"#name#"}"
于 2012-08-27T19:45:21.870 に答える