2010/08/19

Shift-JISやEUC-JPでURLエンコードを行う

HTTPでURLを扱う時は、ASCII文字しか使用してはならないことになっているため、使用できない文字は「%」の後に2桁の16進数文字を続けて1バイトを表す「パーセントエンコーディング」という方式でエンコードしなければなりません。
日本語などのマルチバイト文字の文字コードには特に規定がないため、WebサイトによってUTF-8だったりEUCだったりまちまちです。

URLをブラウザなどで開く場合、正しくエンコーディングされていないと、ページが開かれなかったり検索ワードが文字化けしてしまうことがあります。
JavaScriptでは、「encodeURI()」や「encodeURIComponent()」という関数でパーセントエンコーディングを行なえますが、文字コードはUTF-8に固定されており、Shift-JISやEUCなどの文字コードでのエンコードはできません。

Shift-JISやEUCでエンコードされたURLを生成したい場合は、NILScriptに用意されている「MBString.encodeURI()」や「MBString.encodeURIComponent()」を利用してください。
例えば、「keyword」という変数に格納された文字列をShift-JISにエンコードして埋め込んだURLを関連付けに従って開くには、以下のようにします。
実際には、Hotstrokesなどの機能と組み合わせて利用すると良いでしょう。
exec('http://search.example.com/?q='+MBString.encodeURIComponent(keyword,'sjis'));
MBString.encodeURIComponent()は、通常のencodeURIComponent()と違い、第2引数で文字コードを指定できます。

URLの文字コードを判別するには、ブラウザ上で利用したいサービスのキーワード入力欄から「あ」を検索してみるとよいでしょう。検索結果ページのURLに「%82%A0」が含まれれば「sjis」、「%A4%A2」が含まれれば「euc」、「%E3%81%82」が含まれれば「utf8」を指定すればよいはずです。

0 件のコメント:

コメントを投稿