【PHP】GETで送信する文字列に”.”(ドット)が含まれる場合の対策

$_GETで送信する文字列に”.”(ドット)が含まれる場合、PHP は“.”(ドット)“_”(アンダースコア)に自動的に変換します。
その為、GETメソッドで値を受け取ろうとすると文字列が”_”(アンダースコア)に変換されたまま受け取る事になる。
例)
ore-memo.com

ore-memo_com

php.iniファイルのregister_globalsをoffにするなどの対応もできますが、php.iniファイルや.htaccessファイルはいつでも変更できるわけではないので、PHPファイル内で対応してみた。

【解決方法】
サーバ変数、
$_SERVER['QUERY_STRING']
で取得できるデータから、欲しい文字列を抜き取る方法で解決できた。

例)
http://www.ore-memo.com/index.html?url=ore-memo.com
の場合、

	// サーバ変数の中身をexplodeで分割し配列に入れる
	$get_data = explode("=", $_SERVER['QUERY_STRING']);
	
	// 特殊文字を元に戻す
	echo urldecode($get_data[0])."<br />";
	echo urldecode($get_data[1]);

サーバ変数$_SERVER['QUERY_STRING']の中には”?”以降の文字列が入る為、”=”で分割して値を取り出す必要がある。

【出力結果】

url
ore-memo.com

GETメソッドで複数の値を受け取る場合は、”&”で分割したのち、”=”で再度分割する。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>