最近我重建了一些表格,以便他们接受国际域名,例如
http://例子.测试
然后我会将它们存储为 punycode。在此之前,我们使用 Coldfusions isValid()
运行验证代码来检查域是否有效。方法:
if(not isValid("url", sURL)){
return false;
}
对于 punycode,我们遇到了 isValid()
的问题。当域如下时函数失败:
http://例子.测
或者当使用 CreateObject( "java", "java.net.IDN" ).toASCII(sURL);
转换为 punycode 时在某些情况下,结果如下:
xn--http://133ab--xn328sdf
(编造的示例,但在某些情况下,http://部分之前会有字符)
目前是否有一种方法可以使用 Java 库或 Coldfusion 库或正则表达式来验证 IDN 和“正常”域?
最佳答案
IDN 仅代表域名,您似乎在要转换的字符串中包含协议(protocol) (http://)。
首先使用简单的replace() 或使用java.net.URL 删除协议(protocol),然后根据需要重新组合协议(protocol)和idn。
<cfscript>
oUrl = createobject("java", "java.net.URL").init("httP://例子.测试");
protocol = oUrl.getProtocol();
domain = oUrl.getHost();
idn = createobject("java", "java.net.IDN").toAscii(domain);
writeDump(protocol); // -> http
writeDump(domain); // -> 例子.测试
writeDump(idn); // -> xn--fsqu00a.xn--0zwm56d
</cfscript>
一旦你有了 punycode,你就应该能够对其使用 isValid() 了。
关于java - Coldfusion 和 Java 如何验证 punycode IDN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10548523/