JavaScriptでURLをちょっと賢く解読する。
-
- プログラミング
- /
- JavaScript
- |
- |
- 2011-02-20 00:00
ちょっと賢くURLデコードする。UTF-8限定だけど。
Googleの検索結果とかでURLに %E3%81%AD%E3%81%8E などと、
%xxな文字列になっている事があるが、
URIの規則を定める RFC 3986 では、URIにASCIIの非予約文字[1]以外の文字データを用いる場合には、「%xx」(xxは16進数)という形でコードを表記することが定められている。という事で、JavaScriptで元の文字に戻すには、decodeURIすればいい。
URLエンコード - Wikipedia
decodeURI('%E3%81%AD%E3%81%8E'); //=>'ねぎ'
でもエラーに弱くて、例えば、
decodeURI('%E3%81%AD%E3%81%8E%E5%A4%A7%E7%9B%9B%E3%82');
//=>'URIError: URI malformed'
例外が起きて変換できない。最後の %E3%82 の後に1個足りないせい。
そこだけ除いてデコードするっきゃない。
正規表現で有効なデータを抜き出して decodeURIすりゃいい。
var utf8uri = new RegExp(
"%[0-7][0-9A-F]|"+
"%C[2-9A-F]%[89AB][0-9A-F]|%D[0-9A-F]%[89AB][0-9A-F]|"+
"%E[0-F](?:%[89AB][0-9A-F]){2}|"+
"%F[0-7](?:%[89AB][0-9A-F]){3}|"+
"%F[89AB](?:%[89AB][0-9A-F]){4}|"+
"%F[CD](?:%[89AB][0-9A-F]){5}","ig");
s=s.replace(utf8uri,function(whole){
return decodeURI(whole);
});
UTF-8のURIエンコードだけにマッチングする正規表現にしてみた。
UTF-8っておもしろいコードしてるな!!
1〜6バイトの可変長で、1バイト目でバイト数が分かるようになってて、
1バイト目かどうかを識別できるのがいい!
ASCIIコードと上位互換してるってのも気配りできてる感じでいい。
さてと、急に話は変わるけど、
URIエンコードされた文字列みてると、たまに %25E3%2581 とか
%25 がやたらでてくる場合があるんだけど、%25って % の事。
つまり、2回 encodeURI()したってこと。
更に、何度も何度も encodeURIされてて、
%25252525E3
とかニコニコ成長してく(笑)。
これも正規表現使ってさくっと変換してみよう〜。
s=s.replace(/%(?:25)+([0-9A-F][0-9A-F])/g,function(whole,m1){
return "%"+m1;
});
うん。満足。
正規表現って便利だな。はまる人が多いのもわかる気がする。
さてさて、
両方足したデコードできるサンプルを↓に置いてみた。
↑のソースはgistに置いた。
UTF-8も面白かったけど、やっぱ正規表現。
正規表現はプログラマにとって必修科目と思うんだけど、
以外にさっぱり分からんって人が多いんだよな。。
まぁ、人の事はいいとして、正規表現は複数の言語を渡り歩くためにも、
熟考しといたほうがいいんだけど、まだ、読めてないんだよなぁ↓の本。
![]() | 詳説 正規表現 第3版 (2008/04/26) Jeffrey E.F. Friedl 商品詳細を見る |
つい、クックブックとかに手を出しそうになる。
![]() | 正規表現クックブック (2010/04/15) Jan Goyvaerts、Steven Levithan 他 商品詳細を見る |
あと、文字コードはこの本がいいって聞いたことあったな。
![]() | プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ) (2010/02/18) 矢野 啓介 商品詳細を見る |
- 2012-01-03: Javascrptで TwitterのRSSを取得する
- 2011-03-27: 東京の電力使用状況グラフをJavaScript+GoogleChartで作った
- 2011-02-27: JavaScriptでYouTubeのWebAPIを使ってみた
- 2011-02-20: JavaScriptでURLをちょっと賢く解読する。
- 2011-02-13: JScriptでwgetのようなこと
- 2011-02-12: JavaScriptでドラッグアンドドロップ
- 2011-02-06: HTMLのFile APIでTSVファイルをドラッグアンドドロップで表示
- 2008-11-01: %25とかで読めないURLをなんとかする
★☆★コメント★☆★
コメントの投稿
トラックバック
http://iyukki.blog56.fc2.com/tb.php/120-74d31eef









FollowMe