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
使用しているエンコードが特定できるならそれを指定してやればいいのですが、
それが無理、あるいは難しいなら auto を指定してやるとか。
$keyword = mb_convert_encoding($keyword, 'UTF-8', 'auto') ;
既に解決済みのようですが、ご参考までに。
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 で記述しているのだろうと勝手に思っていました。
回答ありがとうございます。
つまり
$wiki_keyword = mb_convert_encoding($keyword,'UTF-8','SJIS');
のように変換前の文字コードを指定していなかったので、変な動作をおこしていたのですね。
確かにこれでうまくいきました!