よろしくお願い致します。
題名にもありますが、日本語文字列をURLエンコードできるTOOL、またはCGIはありませんでしょうか?
JavaScriptでもOKです。
例)
あいうえお→ %82%A0%82%A2%82%A4%82%A6%82%A8
東京都→ %93%8C%8B%9E%93s
といった具合に変換したいのです。
参考のサイトしては、
http://www.geocities.co.jp/SilkRoad/4511/vb/urle …
にある、
http://www.geocities.co.jp/SilkRoad/4511/vb/samp …
のような感じで、複数行を一括でURLエンコードできると良いです。
私はあるデータベースのサイトを運営しており、某地図サイトの地図リンク機能を付け加えようと思ったのですが、数千件のデータを扱っているので1つ1つ変換するのも膨大に時間がかかってしまうので、できればCGIやTOOLで一括に(データを複数に分割して変換しても良いですが)変換できたら良いなと思っています。
データベースの検索にはCGIROOMさんの所で配布されている、「検索専用データベースVer1.44」を使用しています。
(CGIROOM:http://cgiroom.nu/)
検索後の出力時に、URLエンコードを行う機能をつけれればベストなのですが、私の技量では付け加えれるだけの知識はありません。
もし簡単にこのような機能を付け加えることができるのであれば、御教授お願い致します。
いろいろとサイトやTOOLを探してみたのですが、URLデコードがはるかに多く(当然のことですが)見つけることはできませんでした。
今後、サイトをより便利に使いやすくするためにも、地図リンク機能を是非付加えたいと思っています。
長くなってしまいましたが、宜しくお願い致します。
(もしこちらで回答されるのに支障がありましたら、メールでの回答でも承ります。)
No.3ベストアンサー
- 回答日時:
もう一度だけ答えます。
(これでわからなかったらあきらめるが吉)1)まず、エンコードしたものを吐き出すCGIは以下
#!/usr/bin/perl
open IS, "data.csv";
open OS, ">edata.csv";
foreach(<IS>) {
@line=split /,/;
foreach (0..$#line) {
$line[$_]=~ s/(\W)/'%'.unpack("H2",$1)/eg;
};
print OS join(",",@line)."\n";
}
print "Content-type: text/html; charset=Shift_JIS\n\n";
print "エンコード版出力OK!";
以上のCGIをedata.cgi と名づけ、今のdatabase.cgi と全く同じディレクトリに
置く。そして、一度実行(http://~/edata.cgiなどとする。1度OK)
これを実行すると、data.cvs を一括で読みこみ、エンコードされて、edata.csvという日本語や記号をエンコードしたデータを作成します。
FTPでダウンロードなり何なりして中身を確認すればOK。
2)普段から、エンコードされた文字列を吐き出すのはdatabase.cgiを以下のように修正
#◆補助機能
# 「print<<HTML;」の前にこれらを記述するとデータを編集できます。
# &comma($data[**]);
# 数値に自動でコンマを入れます。つまり 10000 が 10,000 と成ります。
# tag($data[**]);
# タグなどに使用される記号を無効させます。
@edata=@data;
foreach(@edata) {
s/(\W)/'%'.unpack("H2",$1)/eg;
}
$print .=<<HTML;
<!-- 該当 -->
<table border=0 width="100%">
<tr bgcolor="#EEEEEE"><td width="30%" align=right>商品名 </td><td width="70%"> $edata[2] </td></tr>
<tr><td align=right bgcolor="#F0F1E7">商品ナンバー </td><td width="70%"> $edata[1] </td></tr>
<tr><td align=right bgcolor="#F0F1E7">お値段 </td><td width="70%">$edata[3]</td></tr>
<tr><td align=right bgcolor="#F0F1E7">説明 </td><td width="70%"> $edata[4] </td></tr>
<tr><td align=right > </td><td width="70%"> </td></tr>
</table>
<!-- 該当 -->
途中のforeach文の挿入や、$data[*] と $edata[*]の違いなど良く見て
修正すること。
kokuchoさん、再度回答して頂きありがとうございます。
先程、教えて頂いた通りにスクリプトを追加・修正して、実行してみたところ、私が希望した通りにエンコードされた形で表示されました。
また、地図リンクサービスに使用できるように編集して、実行してみたところ、こちらも該当する住所の地図を表示できるようになりました。
今まで様々なCGI関連のサイトで、URLリンクの方法などを見てきましたが、知識がない私にはどのようにして組み込んだら良いのか、ほとんど分からず半分諦めかけていたところです。
こちらで最後の頼みとして質問させて頂いて、良かったと思います。
そして、kokucho81さんに御教授して頂けたことを、大変嬉しく思います。
なんとお礼を申上げたら良いのか、言葉が見つかりません。
今まで数カ月悩んでいたことが、やっと解決できました。
本当にありがとうございました。
心からお礼を申し上げたいと思います。
またこちらでご質問させて頂くことがあるやも知れませんが、よろしくお願い致します。
それでは、失礼致します。
No.2
- 回答日時:
sub hexenc{
my @ary, $dat;
@ary = unpack("C*", @_[0]);
$dat = '';
foreach(@ary){
$dat .= sprintf("%%%0.2x", $_);
}
return $dat;
}
を関数として
$data = hexenc("あいうえお");
とかやってみてください。
ダメだったらまた言ってください。
haporunさん、御回答ありがとうございます。
kokucho81さんが、新たにアドバイスして頂ける前に、いろいろと試してみたのですが、上手くいきませんでした。
ですが、回答して頂いただけでも嬉しく思います。
ありがとうございました。
これからもよろしくお願い致します。
では失礼します。
No.1
- 回答日時:
いや~、教えてGOOに来るのも久しぶりだな~。
ひとつ回答して行くかな。
なになにですと?
ふむふむ。
エンコードは
$line =~ s/(\W)/'%'.unpack("H2",$1)/eg;
で$lineの中に入った文字列がエンコードできまするぞ。
CGIに合わせて改造しなされ。
なにかファイルをエンコードしたいということであれば、
while(<>) {
s/(\W)/'%'.unpack("H2",$1)/eg;
print;
}
としたファイルをconv.pl とでも名づけ、
「perl conv.pl エンコードしたいデータファイル名 > エンコードしたものを出力したいファイル名」
とすれば、しゃかしゃかエンコードしてくれますじゃろ。
ではでは、さらば。
kokucho81さん、御回答ありがとうございます。
いろいろと試してみたのですが、エンコードをすることはできませんでした。
検索CGIのスクリプトに、記述する場所を変えてみたり、「$line」を出力させたい変数(?)「$data[*]」に変えてみたりしてみましたが、やはりダメでした。
もう少し、詳しく御説明したいと思います。
エクセルで作成されたデータを使い、データ検索をさせています。
出力側には$data[*]というのを使用しています。
「*」にはエクセルでの列番号を表しており、その列で該当するデータがあれば、その文字列を表示するようになっています。
例えば$data[2]としますと、エクセルで2列目の中で検索のキーワードに該当する文字列を表示させる。と言うことです。
単純に
$line =~ s/(\W)/'%'.unpack("H2",$1)/eg;
を
$data[*] =~ s/(\W)/'%'.unpack("H2",$1)/eg;
と変更したものを記述してみたのですが、上手くいきませんでした。
具体的には&data[*]には住所が入ることになっており、この住所をURLエンコードして、地図リンク機能に使える状態で出力することがしたいと思っております。
CGI(Perl)については、Readmeに書いてあることぐらいしか、いじれないので御教授して頂ければ、大変助かります。
何卒、よろしくお願い致します。
では、失礼します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) WordやExcelで英数字のみ半角または全角にしたい 6 2022/08/03 08:18
- 画像編集・動画編集・音楽編集 わかりやすい写真編集ソフト 3 2022/07/16 09:59
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- JavaScript Q&Aの掲示板を作成していてヤフー知恵袋やgoo質問のように質問ごとにURLを生成したい 5 2023/08/04 01:22
- 美術・アート トレパク疑惑をかけられにくくするには ここ最近いわゆるトレパク警察のいいがかりがが厳しくなったようで 1 2023/08/21 09:59
- docomo(ドコモ) SIMフリー機種への乗り換えについて 7 2022/09/01 14:05
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Visual Basic(VBA) VBA Twitter 高度な検索 日付 単語 リンクをOutlook で送信 2 2022/06/18 18:36
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JSONで文字列が長い時
-
メモリをアドレスを直接指定し...
-
フォームで入力した値を表示し...
-
Application.ScreenUpdating = ...
-
formで特定のinputを送信しない...
-
文字の横にプルダウンを表示さ...
-
どちのほうがすきですか?
-
int(input("○○"))の使い方
-
実行時エラー 3020の対策
-
プルダウンで別項目に値を代入...
-
C言語のflagの使い方が分かりま...
-
16進の10進変換について
-
ACCESS テキストボックスを隙...
-
[html]ラジオボタンを使った診...
-
コンボボックスのtag情報の取得...
-
I2C接続のLCDディスプレイを使う
-
日齢計算プログラム
-
c言語 16進数の2進数への変換
-
Perlで複数の値を返す良い方法...
-
[python] 文字列を変数名として...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JSONで文字列が長い時
-
メモリをアドレスを直接指定し...
-
【C#】数値の範囲チェックについて
-
map(STL)でinsertを行いたいで...
-
リロード後にプルダウンの選択...
-
フォームで入力した値を表示し...
-
Perlでアルファベットを数...
-
linq で 楽天ウェブサービスのX...
-
入力内容のチェック・・・『ま...
-
途中まで出来ているのですが‥(D...
-
CGI(Perl)で、Net::FTPを使いたい
-
前のページへ戻ったときのプル...
-
パターンマッチで変数でマッチ...
-
セレクトボックスについて
-
CGIやPHPで外部ファイルの内容...
-
デコードできない時があります><
-
Application.ScreenUpdating = ...
-
どちのほうがすきですか?
-
formで特定のinputを送信しない...
-
Pythonでターミナルに文字を出...
おすすめ情報