转义=java字符串中的字符

转义=java字符串中的字符,java,struts,Java,Struts,我正在形成我的问题。对不起。以下是我问题的摘要 在JSP中,我有一个字段 <input maxlength="200" name="productName" > 我得到的输出是“cQN==ujyRMdr Qi8dO9Xm*eRun ner==aLTyt?aKmGI”。 如果你观察到+正在转换为我不想要的空间 如果我不使用decoder.decode,其他字符将转换为各自的转义字符。但我想要的是动作课 编码iam和检索值的方式 在JSP中,我有一个字段 我输入的值类似于“101

我正在形成我的问题。对不起。以下是我问题的摘要

在JSP中,我有一个字段

<input  maxlength="200" name="productName" >
我得到的输出是“
cQN==ujyRMdr Qi8dO9Xm*eRun ner==aLTyt?aKmGI
”。 如果你观察到+正在转换为我不想要的空间

如果我不使用decoder.decode,其他字符将转换为各自的转义字符。但我想要的是动作课


编码iam和检索值的方式

在JSP中,我有一个字段

我输入的值类似于“1012990-c1e197eda0s-a1de198b0b2-819e25307de-xnXrmXWBidhksyn70rGyTHa==cQNujyRMdrQi8dO9Xm+eRunERd==aLTyt+aKmGI+KRCRTMP5EHFR=” 行动中

private String saveProductName( SWHttpServletRequest request)
             throws Exception

{
    try
    {
                String ProductName      = request.getParameter("ProductName");
                System.out.println("-->ProductAction---->saveProductName--->ProductName -->  : "+ProductName);  
    }
 }
我得到的输出为“1012990-c1e197eda0s-a1de198b0b2-819e25307de-xnXrmXWBidhksyn70rGyTHa%253D%253DcQNujyRMdrQi8dO9Xm+eRunERd%253D%253DaLTyt+aKmGI+KRCRTMP5EHFR%253D%253D”
如果我们使用decoder except+一切正常

您不必在操作中解码任何内容。ServletAPI为您做到了这一点<代码>请求。getParameter()就足够了。问题是在生成表单字段或URL时没有正确编码参数

如果是表单字段,则它是HTML代码的一部分,因此必须是HTML转义字段:

<input type="hidden" name="someName" value="<c:out value="${theFieldValue}"/>"/>

struts html:hidden还正确地处理html转义

如果是URL,则应使用URL编码,并转义html:

<c:url var="theUrl" value="someUrl.do">
    <c:param name="someName" value="${theFieldValue}"/>
</c:url>
<a href="<c:out value="${theUrl}"/>">The link text</a>


如果在表单的文本字段中键入此值,则
request.getParameter()
就足够了。

我认为它与URL编码有关,而不是与HTML编码有关。您可以尝试URL编码。如何检索参数?我不知道您为什么在此时调用它的
escapeHtml
。首先,我尝试使用字符串productName=request.getParameter(“productName”);当它不工作时,我使用了escapeHTML,但仍然没有用。如果我使用URLEncoder.encode,则+号但=转换为%3D不会有问题。我已编辑了我的问题以使其简单化。请原谅,我以前只使用request.getParameter(),但它不起作用。所以用解码器。我只是在文本框中键入值,然后使用request.getParameter()在Action类中获取值。它应该可以在不解码任何内容的情况下工作。请再试一次,并向我们显示操作代码和表单的生成HTML代码。如果我编辑了我的问题,以包含代码Iam如何检索输入名称为“productName”(小写p)。用于获取其值的参数是“ProductName”(大写P)。你没有读到这个领域的内容。SWHttpServletRequest是什么类?它来自哪里?我更改了名称以不反映代码的原始名称。在更改时,我忽略了区分大小写。它的产品名称。SWHttpServletRequest扩展了HttpServletRequest。
<c:url var="theUrl" value="someUrl.do">
    <c:param name="someName" value="${theFieldValue}"/>
</c:url>
<a href="<c:out value="${theUrl}"/>">The link text</a>