みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

文字コードについて

現在、PHP(EUC-JP)でプログラムを作成し、テンプレートはS-JISで表示しています。

テンプレートには下記のようにリンク先をはっています。

<a href="REPLACE">NAME</a>

REPLACEとNAMEはPHP側で作成した値を置き換えています。

NAMEはmb_convert_encodingでEUC-JPをS-JISに変更していますが、リンク先には日本語の文字が含まれています。

私が、考えたものは次に遷移したいPHP以下をエンコードし、それをmb_convert_encodingするというものです。

$url="test.php?ID=".$stData[$i]['id'].&gStationName=".$stData[$i]['name'];
$url_encode=urlencode($url);
$all_data['test'] = mb_convert_encoding($url_encode, "SJIS", "EUC-JP");

このリンク先にカーソルをあてると、日本語はアラビア文字みたいなのが、表示されます。
しかし、このリンクをクリックすると、エンコードされたURLが表示されます。

なぜ、このような現象が起こるのでしょうか?
ご教授ください。

投稿日時 - 2005-02-03 12:02:06

QNo.1199747

すぐに回答ほしいです

質問者が選んだベストアンサー

テンプレートとはご自身で値を適用するための
HTMLソースの事でしたか。

うまく飛ばないとの事でしたが、
いくらgStationNameの値がむちゃくちゃでも
test.cgiと言うファイルが存在すれば
404にはならないと思います。
飛び先のURLが正しいかを確認したほうが良いかと思います。

更に補足要求になってしまうのですが、
・アラビア文字のようなものはどこに表示されるのですか?
・エンコードされたURLはどこに表示されるのですか?
#1補足から
・どのような値が入っているのですか?
・URLエンコード無しで現象が変化するか試しましたか?

投稿日時 - 2005-02-09 12:29:27

お礼

最終的にはうまくいきました。
日本語のところだけをURLエンコードすると
無事に通りました。

投稿日時 - 2005-02-10 19:40:23

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

まず、テンプレートを使用していらっしゃるようですが、
どのテンプレートエンジンを使っているか書かれないと
挙動がまったく予測できません。

判らないまま回答しますと、
urlencode関数を通した時点で2バイト文字(日本語)は
すべてurlの規則に従って変換されるので、
すべて英数と%に変換されます。

その後mb_convert_encodingを行なっても
何も変化していないと予測されます。
ためしにmb_convert_encoding関数を通さずに
URLを見てみてください。

投稿日時 - 2005-02-04 12:35:19

補足

最初のやり方とは少し違った方法で値の受け渡しを行ったのですが、、、やはりうまくいきません。回答ありがとうございます。

テンプレートエンジンとは?というところから調べなければ、いけませんが、、

私の方法がテンプレートエンジンにあたるとは思うのですが、どのテンプレートエンジンをというと少しわかりません。

現在、HTML(テキストなどに)その挿入したい部分の文字列をstr_replaceで置換しています。これもテンプレートエンジンにあたるのでしょうか?

説明文が間違っていましたが、
DBから取得した値を
下記のようにLocationしています。

$url="test.php?ID=".$stData[$i]['id'].&gStationName=".$stData[$i]['name'];
$url_encode=urlencode($url);
header("Location: {$rtnUrl}");

値は入っていますが、
うまくとびません。$stData[$i]['name'];などには日本語が含まれているため、エンコードしています。

エラーの内容としては,
HTTP 404 - ファイル未検出
となります。

投稿日時 - 2005-02-04 14:36:40

あなたにオススメの質問