トピック このトピックは解決済みです
TOPIC 文字化けが無いリンク先ページURLを生成したい
Posted by tanu2
at 2009/11/23(月) 21:36
分類: カスタマイズトラブル

お世話になります。

データ詳細ページ(ShiftJISで表示)から、AmigoDatabase(ver9.85)のデータ項目として定義した「郵便番号」と「住所」から、Weatherニュースのピンポイント天気予報のURLを生成して、クリックで表示させようとしています。

実際、表示しようとすると、以下のようになり、

http://weathernews.jp/pinpoint/cgi/search_result.fcgi?service=1&post=%34%31%33%30%32%33%35&name=%90%C3%89%AA%8C%A7%88%C9%93%8C%8E%73%94%AA%94%A6%96%EC%31%32%36%35%2D%39

<title>繝斐Φ繝昴う繝ウ繝亥、ゥ豌暦シ・テ岡県伊東市八幡野1265-9・・- 繧ヲ繧ァ繧カ繝シ繝九Η繝シ繧ケ</title>

の部分だけ文字化けします。
UTF-8やShiftJISのコード変換等はよくわからないのですが、文字化けしないようにすることは可能でしょうか?

なお、現在、以下のようなやりかたをしています。

data-part/data 内の詳細データ記述は、まず冒頭で以下のようにエンコードし、

$zipenc1 = &UrlEncode($VD[$REC{Data}{zip1}]); ※郵便番号上3桁
$zipenc2 = &UrlEncode($VD[$REC{Data}{zip2}]); ※郵便番号下4桁
$Addressenc = &UrlEncode($VD[$REC{Data}{Address}]); ※住所

それらのデータを以下の記述でリンクしています。

<A HREF="http://weathernews.jp/pinpoint/cgi/search_result.fcgi?service=1&post=$zipenc1$zipenc2&name=$Addressenc" TARGET="_blank">ピンポイント天気\予\報</A>

実は代替案ですが、上記の方法で実現できないので、Weatherニュースのピンポイント天気予報のURL をそのまま weather というデータに入れて、そのデータを表示させようとしましたが、

以下のURL(手入力で表示を確認した固定URL)を表示したいのに、
http://weathernews.jp/pinpoint/cgi/search_result.fcgi?service=3&post=4150028&name=%5b415%2d0028%5d%e9%9d%99%e5%b2%a1%e7%9c%8c%e4%b8%8b%e7%94%b0%e5%b8%82%e5%90%89%e4%bd%90%e7%be%8e

詳細ページで

<A HREF="$VD[$REC{Data}{weather}]" TARGET="_blank">ピンポイント天気\予\報</A>

と記述してみると、先方のサイトでコード変換されるのか、以下になってしまいます。
http://weathernews.jp/pinpoint/cgi/search_result.fcgi?service=1&post=%34%31%35%30%30%32%38&name=%90%C3%89%AA%8C%A7%89%BA%93%63%8E%73%8B%67%8D%B2%94%FC%31%39%30%33%2D%31%31

データ数はそれほど多くないのでこの方法でも、うまくいけばいいのですが、
どうすれば文字化けしないで、リンク先ページを表示できるか、ご教示いただければ幸いです。

編集: 2009/11/24(火) 16:31
トピック このトピックは解決済みです
レス表示 古い順 新しい順 | 4件のレス 1-4 表示中
RES レスメッセージ
Posted by Bear
at 2009/11/24(火) 00:46
Re:文字化けが無いリンク先ページURLを生成したい
こんばんは。
問題は相手先のWeatherニュースのサイトがUTF-8で構成されていることに問題があります。Amigodatabaseの標準文字コードShift_JISの文字コードを送っても文字化けしてします。

> $zipenc1 = &UrlEncode($VD[$REC{Data}{zip1}]); ※郵便番号上3桁
> $zipenc2 = &UrlEncode($VD[$REC{Data}{zip2}]); ※郵便番号下4桁
> $Addressenc = &UrlEncode($VD[$REC{Data}{Address}]); ※住所

URLエンコードを行う前にUTF-8に文字コードを変換して下さい。
次のようにすると思うようになるかと存じます。

$zipenc1 = &Jcode::convert(\$VD[$REC{Data}{zip1}], 'utf8', 'sjis');
$zipenc2 = &Jcode::convert(\$VD[$REC{Data}{zip2}], 'utf8', 'sjis');
$Addressenc = &Jcode::convert(\$VD[$REC{Data}{Address}], 'utf8', 'sjis');
$zipenc1 = &UrlEncode($zipenc1); ※郵便番号上3桁
$zipenc2 = &UrlEncode($zipenc2); ※郵便番号下4桁
$Addressenc = &UrlEncode($Addressenc);
※AmigoDatabase側でJcodeモジュールの利用がOKとなっている必要がありますのでご注意下さい。
Posted by tanu2
at 2009/11/24(火) 09:00
Re:文字化けが無いリンク先ページURLを生成したい
Bear様、ご返信ありがとうございます。

やってみましたが、検索結果まで表示されますが、詳細ページが真っ白になりました。

> ※AmigoDatabase側でJcodeモジュールの利用がOKとなっている必要がありますのでご注意下さい。

やってみましたのはまず、詳細ページテンプレートの冒頭のエンコード記述を以下へ変更。

【現状】
$zipenc1 = &UrlEncode($VD[$REC{Data}{zip1}]);
$zipenc2 = &UrlEncode($VD[$REC{Data}{zip2}]);
$Addressenc = &UrlEncode($VD[$REC{Data}{Address}]);

【変更後】
$zipenc1 = &Jcode::convert(\$VD[$REC{Data}{zip1}], 'utf8', 'sjis');
$zipenc2 = &Jcode::convert(\$VD[$REC{Data}{zip2}], 'utf8', 'sjis');
$Addressenc = &Jcode::convert(\$VD[$REC{Data}{Address}], 'utf8', 'sjis');
$zipenc1 = &UrlEncode($zipenc1);
$zipenc2 = &UrlEncode($zipenc2);
$Addressenc = &UrlEncode($Addressenc);

その前に、db-setup.cgi の以下の箇所を以下のようにしました。

# ■日本語処理設定(いずれか使用しない方の行頭に#を付加)
&use Jcode; $JCODE='Jcode::convert'; # Jcode.pm
#Lrequire('./lib/jcode.pl'); $JCODE='jcode::convert'; # jcode.pl

何か、間違いはありますでしょうか?
Posted by Bear
at 2009/11/24(火) 14:54
Re:文字化けが無いリンク先ページURLを生成したい
こんにちは。

> やってみましたが、検索結果まで表示されますが、詳細ページが真っ白になりました。

ページが真っ白になるのは500サーバーエラーやAmigoDatabaseエラーでなく、データ詳細ページの変数などの書き方に問題がある場合に起こります。
http://www.cgi-search.info/amigo/faq.html#60
詳細ページの詳細が分かりませんので予測でしか申し上げれませんが、このことを踏まえたうえで、
$zipenc1 = &Jcode::convert(\$VD[$REC{Data}{zip1}], 'utf8', 'sjis');
が何らかの原因になっている可能性があります。
この記述では元データの「$VD[$REC{Data}{zip1}]」もUTF-8へ変換されていますので、もし元データを変換後にも利用されている場合はその表示上で何らかの問題が生じている可能性もあります。

念のためですが次のように修正してみてお試し下さい。
$zipenc1 = $VD[$REC{Data}{zip1}];
$zipenc2 = $VD[$REC{Data}{zip2}];
$Addressenc = $VD[$REC{Data}{Address}];
$zipenc1 = &Jcode::convert(\$zipenc1, 'utf8', 'sjis');
$zipenc2 = &Jcode::convert(\$zipenc2, 'utf8', 'sjis');
$Addressenc = &Jcode::convert(\$Addressenc, 'utf8', 'sjis');
$zipenc1 = &UrlEncode($zipenc1);
$zipenc2 = &UrlEncode($zipenc2);
$Addressenc = &UrlEncode($Addressenc);
因みに上記記述は次のようにまとめられます。
foreach(qw(zip1 zip2 Address)){
  my$tmp = $VD[$REC{Data}{$_}];
  $tmp = &Jcode::convert(\$tmp, 'utf8', 'sjis');
  ${$_} = &UrlEncode($tmp);
}
参考程度にどうぞ。

編集: 2009/11/24(火) 14:55
Posted by tanu2
at 2009/11/24(火) 16:31
Re:文字化けが無いリンク先ページURLを生成したい
Bear様、お世話になっております。
詳細ページでは、郵便番号と住所は単独で表示していまして、それ以外に天気予報用にUTF-8に変換されたデータも必要でした。

さきほど、以下のようにやりましたら、思い通りの表示になりました。誠にありがとうございました。

$zipenc1 = $VD[$REC{Data}{zip1}];
$zipenc2 = $VD[$REC{Data}{zip2}];
$Addressenc = $VD[$REC{Data}{Address}];
$zipenc1 = &Jcode::convert(\$zipenc1, 'utf8', 'sjis');
$zipenc2 = &Jcode::convert(\$zipenc2, 'utf8', 'sjis');
$Addressenc = &Jcode::convert(\$Addressenc, 'utf8', 'sjis');
$zipenc1 = &UrlEncode($zipenc1);
$zipenc2 = &UrlEncode($zipenc2);
$Addressenc = &UrlEncode($Addressenc);

なお、試しに以下もやってみましたが、うまく行きませんでした。

foreach(qw(zip1 zip2 Address)){
my$tmp = $VD[$REC{Data}{$_}];
$tmp = &Jcode::convert(\$tmp, 'utf8', 'sjis');
${$_} = &UrlEncode($tmp);
}

ありがとうございました。
Access: 1,208,915
 
ソーシャルブックマーク: Yahoo!ブックマーク Google Bookmarks はてなブックマーク Livedoorクリップ @niftyクリップ FC2ブックマーク Buzzurl Delicious トピックイット newsing it!