2

最近我重建了一些表格,以便他们接受国际域名,如

http://例子.测试

然后我会将这些存储为 punycode。在此之前,虽然我们运行了验证代码以使用 Coldfusions 方法检查域是否有效isValid()

if(not isValid("url", sURL)){
return false;
}

isValid()使用 punycode,当域如下时,我们会遇到函数失败的问题:

http://例子。测</p>

或者当它使用 punycode 转换为它时CreateObject( "java", "java.net.IDN" ).toASCII(sURL);,在某些情况下会出现如下:

xn--http://133ab--xn328sdf

(虚构的例子,但在某些情况下,http:// 部分之前会有字符)

目前有没有一种方法可以使用 Java 库或 Coldfusion 库或正则表达式来验证 IDN 和“正常”域?

4

2 回答 2

3

IDN 只是域名的表示,您似乎在要转换的字符串中包含协议 (http://)。

首先使用简单的 replace() 或使用 java.net.URL 删除协议,然后如果需要重新组合协议和 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() 了。

于 2012-05-11T09:32:57.577 回答
0

也许这里的答案可能会有所帮助如何使用域名中的变音符号向收件人发送电子邮件?

他们建议使用

<cfset jUrl = CreateObject( "java", "java.net.IDN" ).toUnicode(sUrl) />

LibIdn Java 库

于 2012-05-11T09:38:10.493 回答