ユーザーがリソースのアドレスを入力し、それを次のように変換する必要があると仮定します。
<a href="valid URI here">human readable form</a>
HTML4仕様はRFC3986を参照しており、ホスト部分ではASCII英数字とダッシュのみを許可し、他の部分ではすべての非ASCII文字をパーセントエンコードする必要があります。これは、すべてのブラウザーでリンクが正しく機能するようにするために、href属性に入れたいものです。IDNはPunycodeでエンコードする必要があります。
HTML5ドラフトはRFC3987を参照しており、ホスト部分でパーセントエンコードされたUnicode文字と、ホスト部分と他の部分の両方でエンコードせずにユニコードの大規模なサブセットを許可します。ユーザーは、これらのフォームのいずれかに住所を入力できます。人間が読める形式を提供するには、印刷可能なすべての文字をデコードする必要があります。通常、ターゲットサイトが他の文字エンコードを使用している場合、アドレスの一部が有効なUTF-8シーケンスに対応しない可能性があることに注意してください。
私が入手したいものの例:
<a href="http://xn--80aswg.xn--p1ai/%D0%BF%D1%83%D1%82%D1%8C?%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81">
http://сайт.рф/путь?запрос</a>
これらのタスクを解決するためのツールはありますか?特にPythonとJavaScriptのライブラリに興味があります。
更新:PythonとJavaScriptでパーセントとPunycode(適切な正規化なしで実行できますが、私はそれを使用できます)のエンコード/デコードを行う方法があることを私は知っています。タスク全体にはさらに多くの作業が必要であり、いくつかの落とし穴があります(コンテキストに応じて、一部の文字は常にエンコードされるか、エンコードされないようにする必要があります)。それは非常に一般的であり、最近のブラウザはすでにそのような変換を行っているので、問題全体にライブラリを使用する準備ができているかどうか疑問に思います( http://%D1%81%D0%B0%D0%B9%D1%82.%D1%80%D1%84/
Google Chromeで入力してみてください。これはに置き換えられますが、HTTPリクエストでhttp://сайт.рф/
使用します)。Host: xn--80aswg.xn--p1ai
Update2:Vinay Sajipは、Werkzeugにはほとんどの場合を正しく処理するiri_to_uri関数とuri_to_iri関数があることを指摘しました。これまでに失敗したケースは2つだけです。パーセントエンコードされたホスト(修正が非常に簡単)と無効なutf-8シーケンス(うまくやるのは少し難しいですが、問題にはならないはずです)。
私はまだJavaScriptのライブラリを探しています。書くのは難しいことではありませんが、車輪の再発明は避けたいと思います。