规范化字符串以在 Java 中创建安全的 URL
Posted
技术标签:
【中文标题】规范化字符串以在 Java 中创建安全的 URL【英文标题】:Normalize a String to create a safe URL in Java 【发布时间】:2014-03-07 20:47:38 【问题描述】:我正在用 Java 编写一个库,它以这种方式从文件名列表中创建 URL:
final String domain = "http://www.example.com/";
String filenames[] = "Normal text","Ich weiß nicht", "L'ho inserito tra i princìpi";
System.out.println(domain+normalize(filenames[0]);
//Prints "http://www.example.com/Normal_text"
System.out.println(domain+normalize(filenames[1]);
//Prints "http://www.example.com/Ich_weib_nicht"
System.out.println(domain+normalize(filenames[2]);
//Prints "http://www.example.com/L_ho_inserito_tra_i_principi"
在某个地方存在一个 Java 库,它公开了我在上面的代码中使用的方法 normalize
?
文学:
Which special characters are safe to use in url? Safe characters for friendly url【问题讨论】:
看看这个:***.com/questions/21489289/… @PopoFibo 是的,它有效!我从未见过 Java 中的Normalizer
类!非常感谢!你能用一个简短的例子来回答吗?
【参考方案1】:
假设您的意思是要对字符串进行编码以使其对 url 安全。在这种情况下使用 URLEncoder:
final String domain = "http://www.example.com/";
String filenames[] = "Normal text","Ich weiß nicht", "L'ho inserito tra i princìpi";
System.out.println(domain + URLEncoder.encode(filenames[0], "UTF-8"));
System.out.println(domain + URLEncoder.encode(filenames[1], "UTF-8"));
System.out.println(domain + URLEncoder.encode(filenames[2], "UTF-8"));
【讨论】:
不,因为我不能使用来自URLEncoder.encode()
方法的“特殊”字符,如 % 等。我正在创建必须通过特殊的 XML 验证器有效的 URL。它不需要空格,不需要特殊字符等等
所以它们不是 URL
不不,他们是! XML 包含一个元素列表,每个元素都有一个 rdf:about
属性,该属性有一个 URL 作为值
在这种情况下,我会使用 apache commons lang 库中的 StringEscapeUtils.escapeXML() 但我看不出这与 URL 有什么关系
该方法不适用于验证器。例如,StringEscapeUtils.escapeXml("l'avevo all'università")
转义为l'avevo all'università
:重音“a”仍然存在!此外,文本不是人类可读的。【参考方案2】:
从我之前的回答here 中获取内容,您可以使用java.text.Normalizer
,它接近于规范化Java 中的字符串。规范化的一个例子是;
重音去除:
String accented = "árvíztűrő tükörfúrógép";
String normalized = Normalizer.normalize(accented, Normalizer.Form.NFD);
normalized = normalized.replaceAll("[^\\pASCII]", "");
System.out.println(normalized);
给予;
arvizturo tukorfurogep
【讨论】:
以上是关于规范化字符串以在 Java 中创建安全的 URL的主要内容,如果未能解决你的问题,请参考以下文章
如何在我添加到项目中的 SQL Server Express 数据库中创建用户?