ネットは玉石混交(石多め)

どうも。

先日iOSアプリのプログラムを書いていて、URLエンコードしないといけない場面がありました。

URLエンコードとは、URLに含むことが禁止されている文字をエンコードすることで、

例えば、

https://xxxx.jp?email=hogehoe+hoge@xxxx.jp

これを

https://xxxx.jp?email=hogehoe%2Bhoge%40xxxx.jp

このようにします。

正規表現などを駆使して自力で変換できなくもないのですが、大抵の言語処理系にはURLエンコードを行ってくれる関数やクラスがありますので、普通は素直にそれらを使います。

iOSアプリはswiftという言語で記述します。

swiftにはStringクラスに addingPercentEncoding() というメソッドがありますのでそれを使うことになります。
このメソッドには withAllowedCharacters という引数が必要で、これはどうもURLエンコードしなくてよい文字セットを指定することになっているようです。

何を指定したらいいんだろうなー、、、とGoogleで検索すると、swiftのURLエンコードについて書かれたブログ記事がいくつもヒットします。いくつかの記事に「.urlQueryAllowed」という文字セットを指定しているので、「あーこれか。いかにもな名称だしこれかな」と思って採用してみますが、うまくエンコードされません。。。

なんか別のエンコードするメソッドがあるのかなーとこれまたGoogle検索で探しますが見つかりませんので、今度はaddingPercentEncoding() に絞ってネットの海を彷徨うと「いかにもそれっぽいCharacterSet.urlQueryAllowedは、エンコーディングしてくれない文字が結構ある」と。。。

そのサイトを参考にして

var allowedCharacterSet = CharacterSet.alphanumerics
allowedCharacterSet.insert(charactersIn: "-._~")
addingPercentEncoding(allowedCharacterSet)

とすることで無事エンコードできました。

しかし結構な数のブログ記事には urlQueryAllowed が指定されていました。書いた人がテストした範囲で問題なかったのか、実際にテストもしないでリファレンスを読んだだけで書いてるのか、人の記事をパクッているのか。。。

日々プログラムを書いている時、Googleのお世話にならない日はありません。ググらずにプログラムを書き上げることなど不可能といっても過言ではありません。
ただ、そこに書かれている情報を鵜呑みにすると遠回りしてしまったり、とんでもない間違いを犯してしまうことがあるので注意が必要ですね。


コメント