この記事は、ノンプログラマー向けに、URLエンコードとは何かを簡単に説明するものです。
Textwell のアクションでは、T( 'urlScheme' )
というコマンドを使って、Safari を呼び出したり、他のアプリを呼び出したりできます。
例えば、Apple のホームページを開きたければ、アクションのソースとして以下のようにスクリプトを書きます。
T( 'urlScheme', { url: 'http://www.apple.com' } );
“url:” という記述の後ろに、Apple ホームページのURLがクォーテーションで囲んで書かれているのがわかると思います。このURLの部分を変えれば、他のホームページやアプリケーションを呼び出せるようになります。スクリプトでは、任意の文字列(この場合はURL)はクォーテーションで囲まなければいけません。
T( 'urlScheme', { url: 'http://www.google.com' } );
このようにすれば、Google のページが開きます。
次に、Textwell のアクションから Google で何かのキーワードを検索させるにはどうしたらよいでしょうか。
Google のページでは、キーワード入力欄にキーワードを入れると検索が実行されて検索結果ページが表示されますが、ページ上でキーワードを入れなくても、URLの後ろにキーワードをつけたしてそれをブラウザで開くことで直接検索結果ページを開くことができます。
例えば、”Apple” というキーワードを検索した結果ページを開きたければ、ブラウザのURLに次のように打ち込みます。
http://www.google.com/search?q=Apple
“http://www.google.com/” という Google の URL の後ろに “search?q=” という決まった呪文をつけて、その後ろにキーワードを書けば良いのです。
この URL を Textwell のアクションにしてみます。
T( 'urlScheme', { url: 'http://www.google.com/search?q=Apple' } );
Textwell でこのアクションを実行すると、Safari が開いて、Google で “Apple” を検索した結果ページが表示されます。
では今度は、”Apple Watch” というキーワードを検索したページを表示するにはどうしたら良いでしょうか。
試しに次のようにしてみます。
T( 'urlScheme', { url: 'http://www.google.com/search?q=Apple Watch' } );
すると、これはうまくいきません。
その理由は、”Apple Watch” というキーワードには、単語の間にスペースが含まれているからです。インターネットの URL 文字列にはスペースを使ってはいけない決まりになっているので、プログラムがうまく処理できないのです。
URL に使って良い文字は、アルファベットと数字といくつかの記号で、これは決まっています。スペースは使ってはいけない文字とされています。では上記のように、スペースを含んだ文字列をURLの中で使いたい場合はどうすれば良いのでしょうか。
その方法はURLの仕組みとしてきちんと用意されています。URLエンコードといって、使用不可の文字を、使用可能な文字の特殊な組み合わせで表すのです。
例えばスペースは、”%20″ という文字列で表します。
つまり “Apple Watch” という文字列は URL の中では “Apple%20Watch” と記述します。
そこで上記のスクリプトを次のように変えてみます。
T( 'urlScheme', { url: 'http://www.google.com/search?q=Apple%20Watch' } );
すると、正しく “Apple Watch” の検索結果ページが開くようになりました。
では次に、Textwell のメイン画面に書かれた文字列をキーワードとして Google 検索を実行するにはどうすればよいでしょうか。
Textwell のスクリプトでは、現在カーソルがある行の文字列を T.current という呪文で取り出すことができます。ですから、現在カーソルがある行の文字列を Google 検索したければ、次のような URL を作れば良いのです。
http://www.google.com/search?q=T.current
しかし、T.current は呪文なので、任意の文字列である “http://www.google.com/search?q=” とそのままくっつけることはできません。くっつけるには次のようにします。
'http://www.google.com/search?q=' + T.current
任意の文字列部分をクォーテーションで囲み、プラス記号を挟んで、呪文を書きます。
これをスクリプトに組み込むと、
T( 'urlScheme', { url: 'http://www.google.com/search?q=' + T.current } );
となります。
これでも、現在カーソルがある行の文字列が “Apple” のようなものなら検索できますが、上述の通り、スペースなどの使用不可な文字が含まれているとダメです。
そこでどうするかというと、スクリプトで T.current をURLエンコードしてやります。
文字列をURLエンコードする呪文は、
encodeURIComponent( 文字列 )
というものです。かっこの中の部分がURLエンコードされます。ですからT.current をURLエンコードするには次のように書きます。
encodeURIComponent( T.current )
これをまた Google 検索スクリプトに組み込むと次のようになります。
T( 'urlScheme', { url: 'http://www.google.com/search?q=' + encodeURIComponent( T.current ) } );
お分かりでしょうか。
encodeURIComponent( 文字列 ) という呪文は、アルファベットや数字のように、変換しなくても良い文字はそのままに、URLに使用不可な文字だけを変換してくれます。ですから、現在カーソルのある行の文字列が、使用不可文字を含んでいるかどうかを気にすることなく、いつも encodeURIComponent( T.current ) としていれば良いのです。
以上、Textwell のスクリプトでURLエンコードする意味と方法でした。