どちらが正しいですか?
<img src="#encodeForHTMLAttribute(FORM.path)#">
また
<img src="#encodeForURL(FORM.path)#">
また
<img src="#encodeForHTMLAttribute(encodeForURL(FORM.path))#">
?
どちらが正しいですか?
<img src="#encodeForHTMLAttribute(FORM.path)#">
また
<img src="#encodeForURL(FORM.path)#">
また
<img src="#encodeForHTMLAttribute(encodeForURL(FORM.path))#">
?
エンコードが必要なテキストを挿入する場所のコンテキストに一致する方法を使用してください。
encodeForUrlは動的テキストをURLに配置するためのものです-したがって、それは(など/
)に置き換えられ、それをURL全体に適用すると、エンコードされたURLになります(したがって、src属性で使用するために壊れています)。%2F
ユーザーが部分的なURLを提供できるようにする場合は、分割/
(およびその他の関連する区切り文字)を行い、各部分にencodeForUrlを適用してから、再度結合する必要があります。
注: encodeForUrlはその文字列をJavaに直接渡すように見えます。つまり、バックスラッシュはエスケープ文字として扱われます-代わりに\b\n
エンコードします-この動作は標準のURLエンコード(一般的にはCF文字列)の一部ではありません。これを回避するには、代わりに関数UrlEncodedFormatを使用してください。%08%0A
%5Cb%5Cn
encodeForHTMLAttributeは、動的テキストをHTML属性に配置するためのものです-コンテンツがテキストとして扱われるようにすることを目的としています(HTMLとして解析されません)-コンテンツがURLであるか他のものであるかを認識/認識しません。
要約すると、あなたはおそらくencodeForHtmlAttribute( UrlEncodedFormat( Form.Path ) )
この状況を望んでいます。
あなたの例では、答えは両方を使用することです。
ただし、内容によってFORM.path
は壊れることがあります。
この関数は、URL文字列全体ではなく、uriコンポーネントで使用することを目的としているため、 (Javascriptで行わencodeForURL
れるように)呼び出す必要があります。名前と値のペアなどのURIコンポーネントは、個別にエンコードする必要があります。そうしないと、セパレーター(名前と値のペアの場合は "=")もエンコードされます。encodeUriComponent
次の場合、ファイルがある場合でも404になりindex.cfm
ます。パス区切り文字「/」、クエリ文字列区切り文字「?」に注意してください。名前/値の区切り文字"="はすべてエンコードされているため、文字列全体が1つの単位になります。
<a href="#encodeForURL("/index.cfm?x=y")#">here</a>
代わりに行うべきことは次のとおりです。
<cfset pathURIEncoded = "/index.cfm?#encodeForURL("x")#=#encodeForURL("y")#">
<a href="#encodeForHTMLAttribute(Variables.pathURIEncoded)#">here</a>
もちろん、静的文字列ではなく変数にx
置き換えます。y
この例では、静的パスであるため、encodeForHTMLAttributeメソッドを使用します。唯一の例外は、src属性自体の値が公的にアクセス可能なスコープ(URL、FORMなどを介して送信される)から生成され、動的データが含まれている場合です。この場合、encodeForURL()メソッドを使用します。