LoginSignup
6
5

More than 3 years have passed since last update.

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

Last updated at Posted at 2016-03-23

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

6
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5