PHPでURLを作る

通常のリンクを作る時、例えば直接HTMLで書き込んでも良いのですが、クエリに日本語などが含まれているとurlencodeしないといけません。
しないといけないと言い切るのはアレなんですが、ChromeやFirefoxではおそらく日本語のままのクエリでも行けると思うんです。ただIEはそうはいきません。IE11は知りませんがそれまでのIEでは日本語をブラウザでurlencodeしてくれないのです。

そこで、urlをどのようにして作るかですがurlencodeをすれば良いといいながら日本語の時だけと言う処理は案外面倒です。英語と半角英数字を判断させて、それ以外は日本語とかやろうと思えばやれますが、面倒くさい人向けにPHPでは便利な関数が用意されています。

http_build_query(array)がそれです。

arrayの部分は配列で送ります。
例えば、

こんな感じになります。便利なのは自動でurlencodeしてくれるという所。クエリができたので後はホストの部分(xxx.com)をピリオドで連結でもしておけば良いわけです。
こうしておけばいちいちurlencodeしなくても良いばかりか配列なのでforやforeachなどからデータを読み込んで、そこから連想配列を作りurlを作成できます。

こんな感じでしょうか。

更にphpにはcompactと言う関数もあります。これは変数名から配列を作れる関数です。
“name” => $name と結局変数名を使っているのであれば、compactでそのまま配列を作った方が楽そうです。
※ちゃんと動くかは試してませんが

こんな感じでしょうか。

横着をせずに連想配列を作れば様々な場面でアドレスを切り替えたりもできるかもしれません。例えばmode=ageの時には生年月日も表示したりとか。

例で島崎遥香を出したのでmode=AKBであれば、更にteamも加えて、

xxx.com?name=”島崎遥香”&mode=AKB&team=B

と言うようなクエリを作ったりもできます。そのためには、modeで条件分岐させる必要がありそうです。modeがAKBであれば、その後にはteamが必ず入ると仮定して、A、K、B、4の各チーム名をパラメーターとして関数に送るとしたり、あるいはデータを上手に作ってmakeUrl関数内で送られてきた名前からチームを用意しておいたデータから検索し、チームの部分は自動的に追加と言うこともできるでしょう。

なぜに今更urlについて書いたかと言いますと、例えばurlencodeは抜きにしてもリンクアドレスをそれぞれ直に書き込むとかなり横長になると思うんです。特にクエリがついてきたりすると余計に。すると、例えばエディタの右端で折り返したりして読みにくくなります。
折り返さない設定だと、スクロールが面倒になったりします。

なるべくわかりやすいようにプログラムを書くのが良いかとは思うのですが、何をしているかをわかりやすいようにHTMLをそのままの状態に近い形で書くと折り返しやスクロールの弊害が起こってしまうこともあります。
ケースバイケースだと思いますが、

こんな感じでHTMLの中にPHPを埋め込んだりすると、案外ややこしくなったりすることもあると思うんです。最近のエディタは初めのカッコにカーソルがあれば閉じカッコを強調表示してくれたりしてわかりやすくなっていますが、案外閉じ忘れとかしてしまったりするんですよね。
変数あるいは配列からアドレスが組み立てられればその間違いは少なくなるのと同時にリンクの表記自体も短くなって簡潔になるのではないかという思いと希望を込めて書いてみました。

スポンサーリンク

シェアする

フォローする