我想要转义以下网址:
<input type="text" placeholder="{$_L['Search']}" id="txtsearch">
<div id="filter"></div>
到目前为止,我还没有找到如何对此字符串进行编码以匹配存储在HTML中并编码为URL的字符串,例如&#39;&安培;&#39;应该用#26代替,空间应该用#20等替换
例如,Java的URLEncoder将用&#39; +&#39;替换空格。标志,这不是我正在寻找的东西答案 0 :(得分:1)
到目前为止,我还没有找到如何对此字符串进行编码以匹配存储在HTML中并编码为URL的文件
那是因为没有,因为这是两件事。
以HTML格式打印通常只需将'
,"
,<
,>
和&
替换为'
,"
,<
,>
和&
。以下是这样做的示例:Recommended method for escaping HTML in Java,最简单,最容易理解为
public static String encodeToHTML(String str) {
return str
.replace("'", "'")
.replace("\"", """)
.replace("<", "<")
.replace(">", ">")
.replace("&", "&");
}
请注意,您需要在页面中设置匹配的字符集,并注意如果您在属性字段中打印网址,则要求会有所不同。
编码为网址允许更短的字符列表。来自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", "~");