人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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


●質問者: tokyosmash
●カテゴリ:インターネット ウェブ制作
✍キーワード:Google keyword PHP URL UTF-8
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● GoldenDawn
●35ポイント

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

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

$keyword = mb_convert_encoding($keyword, 'UTF-8', 'auto') ;
◎質問者からの返答

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

つまり

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

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

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


2 ● tezcello
●35ポイント

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

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 で記述しているのだろうと勝手に思っていました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ