変更する必要があります"
〜\"
with JSTL replace function to the string in input tag in input like:
<input type="hidden" name="text" size="40" value="${text}">
${text}
には"
、HTMLは壊れます。
だから私は試しました
<input type="hidden" name="text" size="40" value="${fn:replace(text, "\"", "\\\""}">
そして
<input type="hidden" name="text" size="40" value="${fn:replace(text, '"', '\"'}">
うまくいきませんでした。ページは次のようなエラーになります
org.Apache.el.parser.ParseException:1行32列目で ""} ""} ""が発生しました。次のいずれかが予期されていました: "。" ... ")" ... "[" ... "、" ... ">" ... "gt" ... "<" ... "lt" ... "> ="。 .. "ge" ... "<=" ... "le" ... "==" ... "eq" ... "!=" ... "ne" ... "&&" ...「および」...「||」 ... "または" ... "*" ... "+" ... "-" ... "/" ... "div" ... "%" ... "mod" .. 。
これどうやってするの?
更新
Replace関数のかっこがありませんでした。正しいのは、かっこの近いこれです。
<input type="hidden" name="text" size="40" value="${fn:replace(text, '"', '\"')}">
Update2
テキストを投稿するとき、\
は、この理由のために良い考えではありません HTML入力タグで\ "を使用できないのはなぜですか? コードは次のようになります。
<input type="hidden" name="text" size="40" value="${fn:replace(text, '"', '"')}">
_\
_はJava文字列のエスケープ文字であるため、機能しません。文字列で表すには、もう一度別の_\
_でエスケープする必要があります。また、 _"
_はELの特殊文字であり、文字どおりに表現するにはエスケープする必要があるため、適切な構文は次のようになります。
_<input type="hidden" name="text" size="40" value="${fn:replace(text, '\"', '\\\"'}">
_
ただし、実際にはXSSを防ぐためにfn:escapeXml()
を使用する必要があります。引用符だけでなく、他の文字もエスケープします。
_<input type="hidden" name="text" size="40" value="${fn:escapeXml(text)}">
_
あなたはそれを間違っています(fn:replaceで)。
正しい方法は次のとおりです。
<input type="hidden" name="text" size="40" value="<c:out value='${text}'/>">
(actually tested code - works 100%)
編集:さらに考えると:
タイプミスがあるかもしれません。そこに閉じ括弧がありません。これを試して:
${fn:replace(news.title, "\"", "\\\"")}
また、結果を出力しようとしているのですか、それともnews.title
次回アクセスするときにnews.title
交換は適切ですか?これは結果を出力するために機能しますが、実際の値を置き換えるためには機能しません:news.title
はこの呼び出しによって変更されません。