一般情况下,我们都会替换用户输入的特殊字符,比如 & < > " ' 等等我使用以下方法
public static String revertString(String input) {
// 使失去用处的标签从新有作用
if (input == null) {
input = "";
return input;
}
input = input.trim().replaceAll("&amp;", "&");
input = input.trim().replaceAll("&lt;", "<");
input = input.trim().replaceAll("&gt;", ">");
input = input.trim().replaceAll("    ", "\t");
input = input.trim().replaceAll("\n", "\r\n");
input = input.trim().replaceAll("<br>", "\n");
input = input.trim().replaceAll(" &nbsp;", "  ");
input = input.trim().replaceAll("&quot;", "\"");
        input = input.trim().replaceAll("&#39;", "'");
input = input.trim().replaceAll("&#92;", "\\\\");
return input;
}用户在input 中输入特殊字符 " (双引号)保存,双引号被替换为 &amp; 用户编辑 源码为 <input type="text" value="&amp;" />问题就在这里,这个填被提交到服务器后, 又通过上面的方法替换字符串结果:变成 <input type="text" value="&amp;amp;" /> 意思就是 & 被转成了 &amp;我想知道你们是怎样解决这个问题的,先说声谢谢了

解决方案 »

  1.   

    1.首先你双引号没必要转化,如果怕注入的话,你可以程序里通过参数化形式,避免数据库被注入。
    2.只要将<和>转化成&lt;和&gt;了就行了。
      等从数据库读取的时候,这时候就需要判断,你是直接显示在页面上?还是显示在html的控件中。
      如果直接显示在页面上,无须转化,比如输入的是<input/>显示的还是<input/>。但是如果显示在控件中。 我们需要把&lt;和&gt;给转回来。要不文本框中就会显示&lt;input/&gt;
      

  2.   

    1.双引号不转化的话,再次编辑时就会变成这样 <input value="abc"defg" /> 结果第二个引号后面的值不见了
    2.<input value="&lt;input/&gt;" /> 这里如里不转化的话,不会显示成&lt;input/&gt;的,会显成 <input>感谢你的回答啊