在Java中转义URL

时间:2018-05-29 05:16:20

标签: java web encoding

我想要转义以下网址:

<input type="text" placeholder="{$_L['Search']}" id="txtsearch">

<div id="filter"></div> 

到目前为止,我还没有找到如何对此字符串进行编码以匹配存储在HTML中并编码为URL的字符串,例如&#39;&安培;&#39;应该用#26代替,空间应该用#20等替换

例如,Java的URLEncoder将用&#39; +&#39;替换空格。标志,这不是我正在寻找的东西

2 个答案:

答案 0 :(得分:1)

  

到目前为止,我还没有找到如何对此字符串进行编码以匹配存储在HTML中并编码为URL的文件

那是因为没有,因为这是两件事。

以HTML格式打印通常只需将'"<>&替换为&apos;&quot;&lt;&gt;&amp;。以下是这样做的示例:Recommended method for escaping HTML in Java,最简单,最容易理解为

public static String encodeToHTML(String str) {
    return str
        .replace("'",  "&apos;")
        .replace("\"", "&quot;")
        .replace("<",  "&lt;")
        .replace(">",  "&gt;")
        .replace("&",  "&amp;");
}

请注意,您需要在页面中设置匹配的字符集,并注意如果您在属性字段中打印网址,则要求会有所不同。

编码为网址允许更短的字符列表。来自URLEncoder documentation

  

字母数字字符&#34; a&#34;通过&#34; z&#34;,&#34; A&#34;通过&#34; Z&#34;和&#34; 0&#34;   通过&#34; 9&#34;保持不变。

     

特殊字符&#34;。&#34;,&#34; - &#34;,&#34; *&#34;,&#34; _&#34;保持不变。

     

空间角色&#34; &#34;转换为加号&#34; +&#34;。

     

所有其他字符都不安全,首先转换为   使用某种编码方案的一个或多个字节。那么每个字节都是   由3个字符的字符串&#34;%xy&#34;表示,其中xy是两位数   字节的十六进制表示。

     

推荐使用的编码方案是UTF-8。

你得到那些

的人
String encoded = new java.net.URLEncoder.encode(url, "UTF-8");

以上内容将为您提供HTML表单编码,它与url编码的作用接近,但有一些值得注意的差异,最相关的是+ vs %20。为此,您可以在其输出中执行此操作:

String encoded = encoded.replace("+", "%20");

另请注意,您不希望对整个http://BUCKET_ENDPOINT/PATH_1/PATH_2/PATH_3/PATH_4/PATH_5/TEST NAME COULD BE WITH & AND OTHER SPECIAL CHARS.zip使用网址编码,但要对其最后一部分使用TEST NAME COULD BE WITH & AND OTHER SPECIAL CHARS.zip,以及各个路径段(如果它们未修复)

如果你需要生成url 在html中打印它,首先将其编码为url,然后执行html转义。

答案 1 :(得分:0)

由于我已经知道URL的路径部分不需要特殊的转义,所以我决定使用建议的解决方案here来仅编码zip文件名部分,在这种情况下回答需要

 String urlEscaped = URLEncoder.encode(URL_TO_ESCAPE, "UTF-8")
            .replaceAll("\+", "%20")
            .replaceAll("\%21", "!")
            .replaceAll("\%27", "'")
            .replaceAll("\%28", "(")
            .replaceAll("\%29", ")")
            .replaceAll("\%7E", "~");