POSTでCGIに渡す文字列はURLエンコードされていて、元に戻すにはデコードが必要ですが、もともとURLエンコードされたデータをデコードしたデータにできないでしょうか。
普通は、
読める文字→URLエンコード→CGIによる処理→URLデコード→読める文字
ですが、
もとのデータがURLエンコードされた状態だと、
URLエンコードされた文字→URLエンコード→CGIによるURLデコード→URLエンコードされた文字
となってしまいます。
たとえば、「%82%a0%82%a0%82%a0」というデータ形式から、「あああ」というデータを得たいのです。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

$str をエンコードされた文字列とします。



while ($str =~ /%([0-9a-fA-F][0-9a-fA-F])/g ) {
 $str =~ s/\+/ /g;
 $str =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C",hex($1))/eg;
}

で、URLエンコードされていると思われる文字列(%+十六進の数字) がなくなるまで
ひたすらデコードしてくれると思います。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QHD内のDVD-VideoをハードウェアエンコードでMpeg-4もしくはWMV形式へ変換

現在
HD内に保存してあるDVD-VideoをMpeg-4もしくはWMV形式へ変換するときは、
「InterVideo DVD Copy Platinum」http://www.intervideo.co.jp/products/idc4p/overview.html
と言うソフトウェアを使いソフトウェアエンコードを行っています、がエンコードにかかる時間を減らすためにハードウェアエンコードへ切り替えようと思い、Mpeg4やWMVへ変換できる、エンコードボードを探したところ
株式会社NEXXの「NXCD-750R」
というのが見つかりましたが、
http://www.watch.impress.co.jp/av/docs/20040217/nexx1.htm
付属のソフトではHD内に保存してあるDVD-Videoを
一発で変換とう言うわけにはならなそうでした。

と言うわけで
HD内のDVD-Videoを複雑な過程を踏まずMpeg-4もしくはWMV形式へエンコードできるソフトに対応した(添付してある)
ハードウェアエンコードボードがあれば教えてください

または、同等の結果が得られる方法をがあれば教えてください

現在
HD内に保存してあるDVD-VideoをMpeg-4もしくはWMV形式へ変換するときは、
「InterVideo DVD Copy Platinum」http://www.intervideo.co.jp/products/idc4p/overview.html
と言うソフトウェアを使いソフトウェアエンコードを行っています、がエンコードにかかる時間を減らすためにハードウェアエンコードへ切り替えようと思い、Mpeg4やWMVへ変換できる、エンコードボードを探したところ
株式会社NEXXの「NXCD-750R」
というのが見つかりましたが、
http://www.watch.impress.co.jp/av/docs/20040217/nex...続きを読む

Aベストアンサー

ハードウェアエンコードチップは、基本的にNTSCの信号を
MPEG4等へ変換するものですから、普通はHDD上の動画は
対象となりません。

強いて言えば、再生してビデオ出力に流して
それを再度ハードウェアエンコードカードに…
という方法で、つまり動画時間=圧縮時間。
言い替えれば、ハードウェアエンコードチップの性能は
この線にあると考えて間違いありません。

それに対してPC内でのMPEG2からMPEG4への変換は
トランスコード技術によりますから、作業量として考えれば
フルにエンコードするより小さい作業です。
それに速いCPUを用いるのが最良と考えられます。


なお、Web上の比較情報によると
InterVideo DVD Copyよりも、トランスコードが
若干速いアプリケーションもあるようです。

ちなみに、うちはHDDレコーダーによるMPEG2を
Socket370の非力ゆえ、最大3台4CPU体制でMPEG4化しています。
Windows用市販ソフトだとソフト代もあれですが
Linux用の無償のソフトなので無問題 :-)

ハードウェアエンコードチップは、基本的にNTSCの信号を
MPEG4等へ変換するものですから、普通はHDD上の動画は
対象となりません。

強いて言えば、再生してビデオ出力に流して
それを再度ハードウェアエンコードカードに…
という方法で、つまり動画時間=圧縮時間。
言い替えれば、ハードウェアエンコードチップの性能は
この線にあると考えて間違いありません。

それに対してPC内でのMPEG2からMPEG4への変換は
トランスコード技術によりますから、作業量として考えれば
フルにエンコードするより小...続きを読む

Qa.cgi → b.cgiへデータの受渡し方法

a.cgi → b.cgiへデータの受渡しを行いたいのですが

i-modeのHPで,画面入力させた内容を
a.cgi → b.cgiに受け渡す方法を教えて下さい。

例?:a.cgiに下記のコーディングでは無理ですよね・・・
$aa=$FORM{'aa'};
print "Location: http:・・・・・i/b.cgi?a=$aa\n\n";

Aベストアンサー

こんにちは。

Locationで引数をつけて渡すことは可能です。
なので、例にかかれている書式でも大丈夫です。
実際にそうやって飛ばしています。

ただ、引数の中身が日本語の場合は飛ばす前にエンコードしてやる必要があるかも。

Q音楽圧縮形式の変換。WMPでは再エンコードは出来ないのか。

WMP(Windows Media Player)で再生できるファイルをWMP内で再エンコードすることは可能なのでしょうか。
具体的な例をあげるなら、iTunesでは
『 詳細 → 選択項目を■■(変換形式)に変換する 』
と出来、再エンコードが可能です。
今回自分が変換したいファイルはWAVファイルなのですが、見た目はWAVで中身はogg形式らしく、コーデックを入れない状態では主要のプレイヤーでは再生不可。
http://www.vorbis.com/files/1.0/tobias/OggDS0995.exe か、
http://kitsunezaka.at.infoseek.co.jp/archive/vorbisacm_20020708.zip
を入れたところ、再生は可能になったのですが、その後の変換を何ですればいいのかわかりません。
一般的に、コーデックを入れてWMPで再生出来るようになった後、どのようにすれば別形式に変換出来るのでしょうか。
初めはWMPで出来ると思ったのですが……。どうも見つからず……。
長年MACを使ってるもんで、如何せんWindowsが使えきれてないのが痛いところです。

WMP(Windows Media Player)で再生できるファイルをWMP内で再エンコードすることは可能なのでしょうか。
具体的な例をあげるなら、iTunesでは
『 詳細 → 選択項目を■■(変換形式)に変換する 』
と出来、再エンコードが可能です。
今回自分が変換したいファイルはWAVファイルなのですが、見た目はWAVで中身はogg形式らしく、コーデックを入れない状態では主要のプレイヤーでは再生不可。
http://www.vorbis.com/files/1.0/tobias/OggDS0995.exe か、
http://kitsunezaka.at.infoseek.co.jp/archive/vorb...続きを読む

Aベストアンサー

Windows MediaPlayerではCDから取り込むときにしかエンコードは出来なかったと思います。
変換するには別のアプリケーションでするしかありませんね。

以下、以前私が回答した他の質問からの引用ですが…
SoundPlayer Lilithというソフトがあります。

使い方
(1)変換をするときはウィンドウの上で右クリック
(2)ファイルの変換→変換したい曲をドラッグ&ドロップ
(3)参照で出力先を指定
(4)設定で変換したい形式を選ぶ
(5)↑の上で右クリックするとビットレートやCBR(固定ビットレート)VBR(可変ビットレート)を指定できます。
(6)OKをクリックして開始をクリックすれば変換開始です。

参考URL:http://www.vector.co.jp/soft/win95/art/se174814.html

QCGI.pmで日本語をURLエンコードするとおかしい

CGI.pmで日本語をURLエンコードするとおかしくなります。
print($q->unescape($q->escape('あ')), "\n");
このコードは文字'あ'をURLエンコードしたものをURLデコードして表示するはずです。
すなわち'あ'と表示するはずです。
しかし実際には'a??'と表示されてしまいます・・・
何か他の関数をかまさないといけないのでしょうか???

Aベストアンサー

私の環境では、 utf8 や encoding を use してる場合に単純にはできませんね。

下記は、スクリプトを UTF-8 で書いて STDOUT のコードを Windows の SJIS にする例で、正しく動作します。 CGI.pm 3.15 は utf8フラグに対応してない模様です。

#! /usr/bin/perl -w
useEncode;
useutf8;
useCGI;
binmode(STDOUT, 'encoding(Windows-31J)');
my$esc= CGI::escape('あ');
print("$esc=", decode('utf8', CGI::unescape($esc)), "\n");


再度質問される場合は、上の例の様に問題を確認できるなるべく短いスクリプト全体を書いて頂ければ解決が早いかも知れません。

Qpostやgetで得られたパラメタのエンコードを変換したい

Phpの内部エンコードとhtmlの表示文字コードが異なる場合、
そのformから送られる変数をphpで受けた場合、当然文字化けしてしまいます。

これを回避したいので、
$_POST や $_GET の文字列のエンコードを変換したいのですが(変数名の予想はできない)
受ける変数の文字コードを指定する方法が分かりません。

ご存知の方はご教授お願いいたします。

Aベストアンサー

>できれば$_POST自体の文字コードを変更したいのです

php.ini に自動変換指定があったけど
php4.3以降で mbstring.encoding_translation を on のときのみ、HTTP入力文字エンコーディングは、自動的に mbstring.internal_encodingに変換されます。とのこと。

しかし、mb_convert_encoding()も同じだけど、文字列が短いと誤変換の確率が高くなります。
で、この自動変換を行ってしまうと、誤変換後のデータしか得られないので、
誤変換対策(同時に送られてきた他の文字列と連結して変換するとか、他のデータに文字エンコーディング指定を含めてそれを参考に元文字エンコーディングを指定するとか)が取りにくくなってしまいます。

mbstring.http_input の文字エンコーディングが限定できるならば、自動変換もかなり有効かとも思いますけど、誤変換の可能性は十分考慮して使ってください。

Qperl-cgiで1文字や2文字など短い、文字コードを正しく変換したい

一文字や、2文字の短い文字コードを正しく変換したいのですが何か、良い方法は無いでしょうか?
文字コードには、絶対に、SJISかUTF8のどちらかしか使っていません。
どなたか、お分かりになる方、教えていただけないでしょうか?
よろしくおねがいいたします。

Aベストアンサー

何文字であっても Encode の from_to を使えばいいと思います。



use Encode 'from_to'; # プログラムの最初の方でこれをやっておく。

# 実際に使いたい所でこれをする(この場合はShift_JISからutf8への変換)。
from_to($str, 'Shift_JIS', 'utf8');
# この後は $str の内容がutf8になっている。

Q文字変換のエンコード

HPを編集する際に
サーバーにあるファイルを
編集しようとすると
西ヨーロッパ言語になってしまいます
以前は エンコードせずに
普通にファイル編集できたのですが
モバイル用のサイトの編集で
小文字を書いた編集が
すべて文字化けしてしまい
編集できなくなってしまいました
どうしたらよいでしょうか

サイトのサポートは
バグをのぞいては
サポートは答えられないとのこと
FTPを利用したファイル管理でない
タイプのHPなので
どうしていいかわからないです
新たにHPを新しくしてもまた
同じようにエンコードしないと
だめなのはこちらの環境が悪いせいなのでしょうか

Aベストアンサー

HPにメタタグを挿入すればいいと思います。
メタタの一行目に
<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">
文字エンコードを「Shift_JIS」に指定すればいいです。

QCGIデコードでつまづいています。

PerlCGIのデコードでつまづいています。jcode.plで$valueの値を「%E3%81%BF%E3%81%AE%E3%82%8A%E5%8F%B0」から「みのり台」の日本語に変換しようとしたのですが「%E3%81%BF%E3%81%AE%E3%82%8A%E5%8F%B0」が返されてうまくいきません。申し訳ありませんが知恵を貸して頂けないでしょうか、よろしくお願い致します。

#!/usr/bin/perl
require './jcode.pl';

#デコードするためのプログラム

# プラウザからのデータ取込み
#if ($ENV{'REQUEST_METHOD'} eq "POST") {
# read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
#}
#else {
$buffer = $ENV{'QUERY_STRING'};
#}

# プラウザからのデータ変換
#$i = 0; #※2
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
#1行毎に$name,$valueを取り出す
($name, $value) = split(/=/, $pair);
# 変換演算子 tr + を スペースに置き換え
# $value =~ tr/+/ /;
# 変換演算子 s/// 単語の構成文字にマッチ
# $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;

# " を &quot; に変換
# $value =~ s/"/&quot;/g;
#\n を "" に変換
# $value =~ s/\n//g;

print qq(

  <tr><td>やった</td></tr>
  ) , "\n";


# jcodeでデコードがうまく出来ませんでした。
# 日本語に変換(デコード処理部分)
&jcode'convert(*value,'sjis');
&jcode'convert(*$name,'sjis');
# $FORM{$name} = $value; #※1
# @num[$i]=$value; #※2
# $i=$i++; #※2

# $str = decode('shiftjis', $value);
# $value = encode('shiftjis', $str);

}

@varuee = split(/&*q=/,$ENV{'QUERY_STRING'});

print qq(
  <HTML>
  <HEAD>
  <TITLE>画像の検索結果</TITLE>
  </HEAD>
  <BODY bgcolor="#FFFFFF">

 <H2 align="center">画像データベースの検索結果</H2>

 <!--画像の検索結果を2~3件ためしに表示-->

 <BR>
  <hr>
  <CENTER>
  <table>
);

print qq(

  <tr><td>$value</td></tr>
  ) , "\n";


exit;

PerlCGIのデコードでつまづいています。jcode.plで$valueの値を「%E3%81%BF%E3%81%AE%E3%82%8A%E5%8F%B0」から「みのり台」の日本語に変換しようとしたのですが「%E3%81%BF%E3%81%AE%E3%82%8A%E5%8F%B0」が返されてうまくいきません。申し訳ありませんが知恵を貸して頂けないでしょうか、よろしくお願い致します。

#!/usr/bin/perl
require './jcode.pl';

#デコードするためのプログラム

# プラウザからのデータ取込み
#if ($ENV{'REQUEST_METHOD'} eq "POST") {
# read(STDIN, $buffer, $ENV{'CONTENT_LEN...続きを読む

Aベストアンサー

if($ENV{'REQUEST_METHOD'} eq "POST"){
    read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
}
else{
    $buffer=$ENV{'QUERY_STRING'};
}
$i=0;
@buffer=split(/&/,$buffer);
foreach(@buffer){
($name,$value)=split(/=/,$_);
$value=~tr/+/ /;
$value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode::convert(*value,"sjis","","z");
$value=~s/</&lt;/g;
$value=~s/>/&gt;/g;
$value=~s/"/&quot;/g;
$value=~s/(\n|\r)//g;
}
あんまり変わってませんね^^;;;

自分の所は、これで出来てます。

Q携帯動画変換君で2パスエンコード設定が書けない

携帯動画変換君で、H.264の2パス(Nパス)エンコードがしたいのですが、コマンドが苦手な為、書式がかけません

Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -bitexact -qmin 1 -qmax 31 -vcodec h264 -mbd 2 -4mv -trell -aic -an -vcodec h264 -fixaspect -s 400x240 -r 29.970 -b 1000 "<%TemporaryFile%>_m.mp4""
Command1=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vn -f wav -ar 44100 -acodec pcm_s16le -ac 2 "<%TemporaryFile%>.wav""
Command2=""<%AppPath%>\cores\neroAacEnc" -br 48000 -he2 -if "<%TemporaryFile%>.wav" -of "<%TemporaryFile%>_s.mp4""
Command3=""<%AppPath%>\cores\MP4Box" -add "<%TemporaryFile%>_m.mp4" -add "<%TemporaryFile%>_s.mp4" "<%OutputFile%>.3gp""
Command4="cmd /c "del "<%TemporaryFile%>*.*"

いろいろなものを参考にして、1パス分までは書けました(↑上)
どうしても2パス(Nパス)目の処理が書けなくて悪戦苦闘しています
どうかご教授ください

携帯動画変換君で、H.264の2パス(Nパス)エンコードがしたいのですが、コマンドが苦手な為、書式がかけません

Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -bitexact -qmin 1 -qmax 31 -vcodec h264 -mbd 2 -4mv -trell -aic -an -vcodec h264 -fixaspect -s 400x240 -r 29.970 -b 1000 "<%TemporaryFile%>_m.mp4""
Command1=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -vn -f wav -ar 44100 -acodec pcm_s16le -ac 2 "<%TemporaryFile%>.wav""
Command2=""<%AppPath%>\cores\neroA...続きを読む

Aベストアンサー

-pass *(0/1) -passlogfile "2pass-log"
と書き足せばいいんじゃないでしょうか。
上記の例ですと、映像部分のみの改変として
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -pass 1 -passlogfile "2pass-log" -bitexact -qmin 1 -qmax 31 -vcodec h264 -mbd 2 -4mv -trell -aic -an -vcodec h264 -fixaspect -s 400x240 -r 29.970 -b 1000 "<%TemporaryFile%>_m.mp4""
Command1=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -pass 2 -passlogfile "2pass-log" -bitexact -qmin 1 -qmax 31 -vcodec h264 -mbd 2 -4mv -trell -aic -an -vcodec h264 -fixaspect -s 400x240 -r 29.970 -b 1000 "<%TemporaryFile%>_m.mp4""
Command2="cmd /c "del "2pass-log*.*"""
みたいな感じでよろしいんじゃないかと。
確認はしてませんので保障はできませんが、参考まで。

-pass *(0/1) -passlogfile "2pass-log"
と書き足せばいいんじゃないでしょうか。
上記の例ですと、映像部分のみの改変として
Command0=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -pass 1 -passlogfile "2pass-log" -bitexact -qmin 1 -qmax 31 -vcodec h264 -mbd 2 -4mv -trell -aic -an -vcodec h264 -fixaspect -s 400x240 -r 29.970 -b 1000 "<%TemporaryFile%>_m.mp4""
Command1=""<%AppPath%>\cores\ffmpeg" -y -i "<%InputFile%>" -pass 2 -passlogfile "2pass-log" -bitexact -qmin 1 -qm...続きを読む

QLocation: で cgi → cgi は不可?

print "Location: ./index.cgi\n\n";

上記の命令でエラーとなります。
i-mode用のHPを作ろうと思うのですが,情報の受渡が必要でして・・・
どうすればいいのでしょう?
何かいい方法有りませんか?

Aベストアンサー

 Location: ヘッダは、http:// から始まるフルパスでないと動きません。
 チェックしてみてください。


人気Q&Aランキング

おすすめ情報