2

最近、いくつかのフォームを再構築して、次のような国際ドメインを受け入れるようにしました

http://例子.测试

次に、これらをpunycodeとして保存します。ただし、この前に、ColdfusionsisValid()メソッドを使用してドメインが有効かどうかを確認するための検証コードを実行していました。

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

punycode ではisValid()、ドメインが次のような場合に関数が失敗するという問題があります。

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

または、それが punycode を使用して変換されるCreateObject( "java", "java.net.IDN" ).toASCII(sURL);と、特定のケースでは次のようになります。

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

(例を作りましたが、場合によっては http:// の前に文字があります)

現在、IDN と「通常の」ドメインを検証するために Java ライブラリ、Coldfusion ライブラリ、または正規表現を使用する方法はありますか?

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 に答える