• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:文字をISO Lathin 1 文字コードに変換したい)

文字をISO Lathin 1 文字コードに変換したい

Head_Syndicateの回答

  • ベストアンサー
回答No.1

$name=~s/([^a-zA-Z0-9_.-])/uc sprintf("%%%02x",ord($1))/eg; ですね。ちなみにCGI.pmの中にescape, unescapeというその機能の 関数がありますが、これは内部的に使うように設計されています。 つまりCGI.pmを使うと、CGIをプログラムするときは自動的に入出力で 変換してくれるので気にしなくてよくなるようになるのです。

0011001100
質問者

補足

御回答有り難うございます。ただうちのコンピューター(Macintosh,MacJparl)で $name="%8B%B3%82%A6%82%C4"; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; print"$name\n"; $name=~s/([^a-zA-Z0-9_.-])/uc sprintf("%%%02x",ord($1))/eg; print"$name\n"; とやってみたのですが、 教えて %8B%82%82 というふうにprintされます。 %8B%B3%82%A6%82%C4 となってほしいのに %8B%82%82 になってしまうのです。 なぜでしょう。

関連するQ&A

  • urlエンコード後の文字コードは何?

    $str = "%E3%82%84%E3%81%BE+%E3%81%8B%E3%82%8F"; $str =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("C", hex($1))/eg; こうやってurlエンコードすると、以下のようになります。 「やま+かわ」 1.この「やま+かわ」というのは文字コードは何なんでしょうか? 2.Jcode.pmなどのライブラリを使わずに、utf-8で統一したCGIを書きたいのですが、この文字列をどうすればいいでしょうか。コツを教えてください。 3.あと、+を半角スペースに置換する以外に なにか特別なルールはありますか? 4.参考になるWebページがあれば教えてください。

    • ベストアンサー
    • Perl
  • 入力フォームからの半角カナを認識させたい

    入力フォームからの半角カナを全角に変換したいのですが、方法はありますでしょうか。 h2z_sjisを使ってみましたが、うまく行きませんでした。 foreach $pair (@pairs){ ($name, $value) = split(/=/, $pair); $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*name,'sjis'); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); &jcode'h2z_sjis(*value); $FORM{$name} = $value; } <結果> アイウエオ(半角) → 渦慨オ よろしくお願いします。

    • ベストアンサー
    • Perl
  • PerlプログラムをPHPで書き直しています

    Perlで作ったものをPHPで書き直しています。 似てるようで大変ですね。 $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; という表現ですが、これをPHPで書き直すとズバリどのように なりますか? ちなみにPERLのソースコードでは、このあと &jcode'convert(*value,'sjis'); になるのですが、PHPでPerlのこの変換を実現する一般的方法が あったら教えてください。その方法で全部書き直そうと思います。

    • ベストアンサー
    • PHP
  • フォームデコード

    よく見かける $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; というやつの pack("C", hex($1)) を chr($1) にした方がいい と思ったんだけど、chr($1) のソースは見たことがないです。 chr($1) にするとうまくいかない場合があったりするんですか?

    • ベストアンサー
    • CGI
  • UTF-8から送信されたデータを日本語化するには?

    %E3%81%82%E3%81%84%E3%81%86%E3%81%88%E3%81%8A これを あいうえお に変換するには、どのようにデコードすればいいのでしょうか? ご教授お願いします。m(_ _)m [現在のソース] $buffer = $ENV{'QUERY_STRING'}; @pairs = split(/&/,$buffer); foreach $pair (@pairs){ ($name, $value) = split(/=/, $pair); $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; my $value = Jcode::convert($value, 'utf8'); $FORM{$name} = $value; } ↓ 「縺ゅ>縺・∴縺・」が検出されます。

    • ベストアンサー
    • Perl
  • GETパラメータ

    こんにちは CGI初心者です。 http://www.perl-labo.org/formdata/getmethod/get.cgi?日本語 この様に、日本語のGETパラメータを取得したいです。 http://www.perl-labo.org/formdata/jpname/ を参考にしました。 【記述】 #!C:/Perl/bin/perl package plab; sub getformdata { local $rawdata; local %formdata; local @inputs; local($input, $name, $val); if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $rawdata, $ENV{'CONTENT_LENGTH'}); } elsif ($ENV{'REQUEST_METHOD'} eq "GET") { $rawdata = $ENV{'QUERY_STRING'}; } @inputs = split('&', $rawdata); foreach $input (@inputs) { ($name, $val) = split('=', $input); $name =~ tr/+/ /; $val =~ tr/+/ /; $name =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("C", hex($1))/eg; $val =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("C", hex($1))/eg; $formdata{$name} = $val; } return %formdata; } 1; 実行するとサーバーエラーになってしまいます。 パスは「#!C:/Perl/bin/perl」で合っています。 記述方法のミスでしょうか? 教えて下さい!

    • 締切済み
    • CGI
  • デコード処理部分のプログラムについて

    デコード処理部分のプログラムで分からないトコがあるので教えてください。 $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'euc'); この『pack("C", hex($1))』、『eg』の部分の意味がよく分かりません。 『&jcode'convert(*value,'euc');』の部分も微妙なので、お願いします。

    • ベストアンサー
    • Perl
  • Perlの文字コード変換についての質問です。

    Perlの文字コード変換についての質問です。 ホームページ全体は、UTF-8で作成されています。 そのため、$qsは、どうも、S-JISのようなので、UTF-8に変換して URLデコードさせたいのですがうまくいきません。 文字化けしないで、UTF-8で作成されたページに表示させたいのですがどうすればよいでしょうか? 宜しくお願い致します。 ------------------------------------ $qs = $ENV{'QUERY_STRING'}; use Encode::Guess qw/ shiftjis /; use Encode qw/ decode /; $enc = guess_encoding ( $qs ); if ( ref $enc ) { $utf8 = decode ( $enc->name , $qs ); } $qs =~ tr/+/ /; $qs =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; print "$qs";

    • ベストアンサー
    • Perl
  • データをCGIに渡す形式に変換する。

    中に入れ子で別のCGIが入っているCGIを考えました。 <iframe ・・・ action="入れ子.cgi?data1=なんたら&data2=かんたら"></iframe> みたいな感じです。 data1とdata2は親のCGIで考えて入れ子のCGIに渡します。 ところでCGIにマルチバイト文字を渡す場合は、何らかの処理をして  %([a-fA-F0-9][a-fA-F0-9]) の形式に変換されます。 これを元に戻す方法が  =~s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; であることは分かったのですが、ならば元の文字列を  %([a-fA-F0-9][a-fA-F0-9]) に変換する方法が  =~s/[^a-fA-F0-9]/unpack("H2", $1)/g; かと思いきや、うまく動きません。 どのように式を書けばいいのでしょうか? #! usr/bin/perl -d use utf8; binmode(STDOUT,'utf8'); our %in=(textfield=>'テスト',submit=>'送信'); foreach(keys %in) { my $unpack=$in{$_}; my $unpack=~s/[^a-fA-F0-9]/unpack("H2", $1)/g; my $pack=$unpack; $pack=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; print "$_ &nbsp; $in{$_} &nbsp; $unpack &nbsp; $pack <br>\n"; }

    • ベストアンサー
    • Perl
  • 半角スペースが有効にならない。

    前のページで入力された値を取得するCGIですが、どうしても半角スペースを認識しません。 それどころか、半角スペースの後ろを一切消してデータを取得しています。 同じように作成したものはきちんと動いているのに…。 どこが間違ってるかご指摘お願いします。 ---------- #!/usr/local/bin/perl read(STDIN,$buffer,$ENV{'content_length'}); @atai = split(/&/,$buffer); foreach $atais(@atai){ ($key, $value) = split(/=/, $atais); $FORM{$key}=$value; } $buffer =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $buffer =~ tr/+/ /; $value =~ tr/+/ /; $key =~ tr/+/ /; print "Content-type:text/html\n\n"; print "$key<BR>\n"; print "<A HREF=./***.cgi>Back</A><BR>\n"; open (FH,">***.log"); @filew="$buffer\n"; print FH @filew; close(FH); exit; ---------- 以上です。よろしくお願いします。

    • ベストアンサー
    • CGI