Hatena::Groupstudyroom

phaのPHPとか自習室 このページをアンテナに追加 RSSフィード

PHP(CakePHPとか)、JavaScript(AJAXとか)、MySQL、UNIX、Fireworksなんかを身につけたい><
2007 | 03 | 04 | 05 | 06 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 12 |
2009 | 01 | 02 | 03 | 04 |
2010 | 01 | 06 |
2011 | 01 |

2007-04-01

URLエンコードについて

URLエンコードについて - phaのPHPとか自習室 を含むブックマーク はてなブックマーク - URLエンコードについて - phaのPHPとか自習室 URLエンコードについて - phaのPHPとか自習室 のブックマークコメント

概要

日本語(および特殊文字)はURLで使えないので変換しなきゃいけない

文字コード

文字コードがいくつもあるのが曲者です。

しかも検索エンジンによって違う。

らしい。

  • え、俺がPHPで作ったやつは何になるの? そのページのhtmlコード
    • なんかutf-8のつもりだけど何の処理もなく送ったらeuc-jpになってるぽい。。。
    • あれ、自分のマシンから送ったやつは何の処理もなしでutf-8
      • えー、FTPで何か変更してるとかそういうこと?
        • どっちにしてもきっちり指定したらOKか?

PHPではどうすればいいの?

方法は簡単で、$str = rawurlencode("田中") で $str には「田中」を URL エンコードした結果が格納されます。

え、この場合文字コードはどうなるの? 気にしなきゃいけないんでは?

あ、そうか。文字コードは、最初に日本語入力した時点で決まってるんだ。

そのサイトの指定の文字コードに。

rawurlencode()はそれを直してるだけ。

元は日本語ではなくコード日本人が同じものを入力しているつもりになっているだけ。

urlencode()とrawurlencode()の違い

urlencode( 文字列 )
urlencode()関数は、指定した文字列を、チルダ(~)、アンダースコア(_)、ドット(.)を除く、英数字以外の文字を”%+16進数”の形式に変換します。

また、空白は"+"に変換します。

rawurlencode( 文字列 )
rawurlencode()関数は、urlencode()関数とほぼ同じですが、空白を"+"に変換しない所が異なります。

http://www.php-ref.com/web/01_urlencode.html

rawのほうを使っときゃいいのかな?


JavaScriptではどうすればいいの?

◆EncodeURI(string) stringURIエンコードした値を返します。

例)var str=EncodeURI("http://漢字"); //str に "http://%E6%BC%A2%E5%AD%97" が代入される

◆EncodeURIComponent(string) stringURIエンコードした値を返します(/ , ? , # などもエンコードします)

例)var str=EncodeURIComponent("http://漢字"); //str に "http%3A%2F%2F%E6%BC%A2%E5%AD%97" が代入される

とりあえず俺のサイトでは

encodeURIしといたらうまくいってるみたいだけど、、、

また実はよくわかっていない。

疑問