Mac
OSX
AppleScript
urlエンコード

AppleScript でURLエンコード・デコード

More than 3 years have passed since last update.


AppleScript とURLエンコード・デコード

 ここでいうURLエンコード・デコードとは、ブラウザに要求するURL文字列の中に、URLとして使用してはいけない文字コードを、エンコード・デコードすることで、他にパーセントエンコードや、エスケープなどとも呼ばれるものです。

 これは RFC3986のSection 2.1 で定義されています。

AppleScript には、文字コードをURLエスケープする関数が入っていない(多分)ので、他の助けを借りて実装します。


OS Xに組み込まれていて変換に利用できるもの

 do shell script を使用して、OS Xに入っている機能を使いますが、それには次のような方法があるようです。


PHP を使う

php -r 'echo rawurlencode("<<変換文字列>>”);'


Perl を使う

perl -MURI::Escape -wle 'print uri_escape("<<変換文字列>>")'


Ruby を使う

ruby -r cgi -e 'puts CGI.escape("<<変換文字列>>")'


選んだのは

 perl のURI::Escape モジュールは、渡す文字列の中にエンコード不要な文字が入っていると、正しく変換できない問題があるようです。

 それ以外で、文字数がすくなかった PHP を選びました。


エンコード・デコードする AppleScript

 起動するとエンコードかデコードしたい文字列を入力するダイアログボックスが出力されます。

aURL1.jpg

 入力する文字数は、このボックスを無視して長いものでもOKです。

入力した後、「URLエンコード」か「URLデコード」のボタンを押します。

そうすると、変換された結果が表示されます。

aURL2.jpg

「OK」ボタンを押すと、変換結果のみがクリップボードにコピーされます。


URLendodeDecode.scpt

-- 入力した文字列をURLで使用できない文字をエスケープ(%エンコード・URLエンコード)したり、

-- 逆にエンコードされた文字列を元の文字列に変換して表示します。
-- 表示後にOKボタンを押すと、変換結果をクリップボードにコピーします。
-- エンコード・デコード部分は php の関数を使用しています。

on urlEncode(inData) -- URLエンコード(%エンコード)
-- 文字コードを utf8 としてエンコードしたい場合は、「as «class utf8»」で変換したものを渡すこと。
set scpt to "php -r 'echo rawurlencode(" & quote & inData & quote & ");'"
return (do shell script scpt) as string
end urlEncode

on urlDecode(inData) -- URLデコード(%デコード)
set scpt to "php -r 'echo rawurldecode(" & quote & inData & quote & ");'"
return (do shell script scpt) as string
end urlDecode

set ans to display dialog "変換したい文字列を入力" default answer "" buttons {"URLデコード", "URLエンコード"} default button 2
set inData to text returned of ans
if button returned of ans = "URLエンコード" then
set rs to urlEncode(inData)
else
set rs to urlDecode(inData)
end if
display dialog "変換結果:" & return & return & rs & return & return & "(OKボタンでクリップボードにコピーします。)"
set the clipboard to rs