Help us understand the problem. What is going on with this article?

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした