PHPでutf-8へのURLエンコードをする方法について



WikipediaやGoogleで使われているURLエンコードはutf-8のようです


$keyword ="緑茶";
と変数に入っているとします。


これを、wikipediaやGoogleで使われているURLエンコードにしたいです。
http://ja.wikipedia.org/wiki/%E7%B7%91%E8%8C%B6
(wikipediaの緑茶の項目)


$keyword = '緑茶';
$keyword = mb_convert_encoding($wiki_keyword,'UTF-8');
$keyword = urlencode($wiki_keyword);

これで可能だと思ったのですが、うまくいきません。
そもそも文字コードの概念がよくわかっていない事に気付きました。
どなたかお教えください。


関連質問
http://q.hatena.ne.jp/1196359988

回答の条件
  • 1人5回まで
  • 登録:2007/12/04 21:41:46
  • 終了:2007/12/11 21:45:04

回答(2件)

id:GoldenDawn No.1

GoldenDawn回答回数426ベストアンサー獲得回数812007/12/04 21:59:46

ポイント35pt

使用しているエンコードが特定できるならそれを指定してやればいいのですが、

それが無理、あるいは難しいなら auto を指定してやるとか。

$keyword = mb_convert_encoding($keyword, 'UTF-8', 'auto') ;
id:tokyosmash

回答ありがとうございます。

つまり

$wiki_keyword = mb_convert_encoding($keyword,'UTF-8','SJIS');

のように変換前の文字コードを指定していなかったので、変な動作をおこしていたのですね。

確かにこれでうまくいきました!

2007/12/04 22:06:44
id:tezcello No.2

tezcello回答回数459ベストアンサー獲得回数692007/12/05 00:49:44

ポイント35pt

既に解決済みのようですが、ご参考までに。

mb_convert_encoding() は、変換前のエンコードは内部エンコードであると仮定してたと思います。

利用されているシステムあるいはPHPのデフォルトを調べておくといいと思います。

(phpinfo() で詳細に書き出してくれます)


その上で、PHPを記述するのは内部エンコードに合わせるか、スクリプトの最初で内部エンコードを記述しているのに合わせるかのどちらかの方が良いと思います。

例えばこんな感じ。

// 別にわざわざ定数にしなくてもいいのですけどね
define(SITE_LANG,'ja');	
define(SITE_CHARSET,'UTF-8');

set_magic_quotes_runtime(false);
mb_http_output("pass");
mb_internal_encoding(SITE_CHARSET);
mb_language(SITE_LANG);
mb_regex_encoding(SITE_CHARSET);

ヘッダも出しておくと都合のいい事が多いかもしれません。

header("Content-Type: text/html; charset=".SITE_CHARSET);

マルチバイト系の関数でも正規表現は使えますが、preg_match(), preg_match_all(), preg_replace() などの方が使い勝手が良さそうで、Perl互換な記述の方が自由度が高いようなので、PHPスクリプトや関連するファイルの記述エンコードは EUC か UTF-8 にしておく事をお薦めします。

フリーのエディタでもエンコードを変更して保存するのは可能ですし、大量にあってもファイル毎に全文を読み込んで変換し保存するスクリプトを書けばOKですよね?


関連質問ではこれらの事には触れませんでしたが、EUC で記述しているのだろうと勝手に思っていました。

  • id:tokyosmash
    $keyword = '緑茶';
    $keyword = mb_convert_encoding($wiki_keyword,'UTF-8');
    $keyword = urlencode($wiki_keyword);


    は間違ってました!
    $wiki_keywordではなくて$keywordです。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません