ieのjavascriptでescapeすると
おはよう ⇒ %u304A%u306F%u3088%u3046
となりますが、これをperlなどで同じように
エンコードする方法はありませんでしょうか?

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

A 回答 (3件)

IEなどのJavaScriptで escape を使うと、日本語などは UTF-16(Big Endian)にエンコードされ、%uHHHH 形式にエスケープされます。


また US-ASCII の場合、A-Z a-z 0-9 _ @ . * / + - はエスケープされず、それ以外は %HH 形式にエスケープされます。

UTF-16 への変換は jcode.pl ではできないので、何かしらのモジュールが必要です。
Perl 5.8 以上ならば Encode.pm が標準で使えますが、そうでない場合は Jcode.pm をインストールして使うとよいでしょう。
※ただし、Jcode.pm には utf16 関数がないので、ほぼ同等の ucs2 関数を使います。

以下、サンプルです。

# Encode ver.
sub js_escape {
  use Encode;
  my $str = join "", map sprintf("%%u%04X", $_), unpack "n*", encode("utf16be", decode($_[1], $_[0]));
  my ($ch, $hex);
  $str =~ s<%u00(..)>{ ($ch = pack("H2", $hex = $1)) =~ m<[^\w\@.*/+-]> ? "%$hex" : $ch }eg;
  $str;
}

# Jcode ver.
sub js_escape {
  use Jcode;
  my $str = join "", map sprintf("%%u%04X", $_), unpack "n*", Jcode->new(@_)->ucs2;
  my ($ch, $hex);
  $str =~ s<%u00(..)>{ ($ch = pack("H2", $hex = $1)) =~ m<[^\w\@.*/+-]> ? "%$hex" : $ch }eg;
  $str;
}

どちらも使い方は同じで、
  $escaped_str = js_escape($str, $icode);
となります。
$icode には $str のエンコーディング("sjis" や "euc-jp" など)を指定して下さい。
# print js_escape("おはよう", "sjis"); など

この回答への補足

詳細な解説ありがとうございます!
5.6だったのでJcodeでやったら出来ました。
非常に助かりました。

補足日時:2005/03/10 14:14
    • good
    • 0

Perl 5.8.4を使ったサンプル


#javascript互換escape
use Encode qw(from_to);
$test="おはよう";
$len=from_to($test,'SHIFTJIS','UTF16BE');
#$len=length($test);
for($i=0;$i<$len/2;$i++){
$code=vec($test,$i,16);
printf "%%u%04X",$code;
}

解説:
要は質問文のコードは、ユニコードに%uを付けたものだってことです。
そこで、現在の文字コードのシフトJISからユニコードに変換して、vecで16ビットずつ取り出しています。
    • good
    • 0
この回答へのお礼

分かりやすいサンプルありがとうございます!
やっとどういうことか分かってきました。

お礼日時:2005/03/10 14:49

perlの場合は正規表現を用いて変換して下さい(下記参照)。



参考URL:http://techtips.belution.com/ja/perl/0000/

この回答への補足

ありがとうございます!
早速試してみたのですが、
文字コードを

sjisにした場合は ⇒ %82%a8%82%cd%82%e6%82%a4
eucにした場合は ⇒ %a4%aa%a4%cf%a4%e8%a4%a6

となるようなのですがescapeの場合と全く同じに
するには文字コードは何にすればよいのでしょうか?
また、その場合jcode.plとかでコンバートできますでしょうか?

補足日時:2005/03/08 18:32
    • good
    • 0

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

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

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

Qフォーム送信とURLエンコードについて

CGI&PHP初心者です。
フォームのデータ送信とURLエンコードについて、お尋ねします。

method="GET" のフォームで、検索フォームをつくりたいとおもっています。
日本語も含めた検索語をフォーム送信したいと考えていますが、
送信の結果、エンコードされずにそのままブラウザのURL欄に入力した日本語が表示されてしまいます。
(ただ、メモ帳などにURLをコピーペーストするとURLエンコードがされているようです。)

googleでは検索結果のアドレス欄にURLエンコードされた文字列がでているが、
同じように検索結果のアドレス欄にはURLエンコードされた文字列をだしたい。
URLに日本語をださずにURLエンコードさせた文字列を表示させるには、
どうすればいいのでしょうか?

補足:できるかぎり検索処理が重くならないにしたいと思います。
    開発環境PHP&MySQL
    動作環境Chrome のバージョン 38.0

Aベストアンサー

これはブラウザの機能です。
フォームで入力された文字は、URLエンコードされた状態でサーバーに送信され、サーバーはそれを元の文字列に戻して処理し、その結果を表示しますが、URL欄には
・firefoxは元の文字
・IEはエンコードされたもの
・Chromeはエンコードされたもの
・Operaは表示されない
・Safariは元の文字
 これは当然でしてURL欄には送信した時点のURLが表示され、それをどのように表示するかはブラウザ開発側のスタンスによります。
 URLエンコードされた文字よりは本来のキーワードが表示されるほうが便利だと思いますが???
 PATH_INFOを使用するWikiなどでは実感されるかと
ブラウザ - Wikipedia( http://ja.wikipedia.org/wiki/%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6 )
 どうせ、Ctrl + L → Ctrl + C でコピーすればよいし、firefoxならMaikeLinkアドオン使うし・・

※方法はあります。
 一旦、redirectするページを表示させてから、本来のページにリダイレクトさせる。その場合もブラウザの機能で元の文字列に返すことがあるかも

これはブラウザの機能です。
フォームで入力された文字は、URLエンコードされた状態でサーバーに送信され、サーバーはそれを元の文字列に戻して処理し、その結果を表示しますが、URL欄には
・firefoxは元の文字
・IEはエンコードされたもの
・Chromeはエンコードされたもの
・Operaは表示されない
・Safariは元の文字
 これは当然でしてURL欄には送信した時点のURLが表示され、それをどのように表示するかはブラウザ開発側のスタンスによります。
 URLエンコードされた文字よりは本来のキーワードが表示されるほ...続きを読む

Qperlを使った文字列のエンコードについて

http://www.tagindex.com/tool/url.htmlにあるようなURLエンコードの処理を行いたいのですが、ソースはどのようになりますでしょうか?
下記のようなものできるのかと思いましたが、「テスト」の文字列ですと、「%83e%83X%83g」と表示されてほしいのが、「?e?X?g」となってしまいます。
お分かりの方がおられるようでしたら、ぜひ教えてください。

$str='テスト';
use Encode 'encode';
$str = encode('sjis', $str);
print "$str";

Aベストアンサー

>$str = encode('sjis', $str);

何がしたいの?

encodeは「perlの内部文字列を、指定された漢字コードの文字列にするだけ」ですよ。

URIエンコード、URIデコードは、別の関数を使います。

http://slashdot.jp/journal/450313/%E3%83%A1%E3%83%A2%EF%BC%9APerl%E3%81%A7URL%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E3%83%BB%E3%83%87%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AFURIEscape%E3%82%92%E4%BD%BF%E3%81%86

なお、pack、unpackは「時代遅れ」なので使わない方が良いです。

QURLエンコードされなかったパラメータを受け取る方

Apacheのアクセスログに、URLエンコードされていない変数が正しく書き込まれているのですが、
PHPでがURLエンコードされていない変数が受け取れませんでした。

URLエンコードされずに送信されたデータはPHPでは受け取れないのでしょうか?

Aベストアンサー

>受け取れない

というより、受け取るに値しない(偽装や攻撃やいやがらせ)ということで
弾いた方がよいでしょう。
無駄に評価をしてデータを取ろうとするとセキュリティ上思わぬ問題に
なりかねません。

Q<Perl>URLエンコードみたいに、一括でエスケープシーケンスをしたい

多くの、顔文字をCGIで表示するプログラムを作っているのですが、エスケープシーケンスだらけになって大変です。
$など出てきたときには、print<<"EOM" EOM でくくってもおかしな動作をしたり、¥¥などと出てきたときもおかしな動作になって困っています。
URLエンコードのように、何か、こう、サクット簡単に、文字を全部エスケープシーケンスに直してくれるbサイトかアプリはないでしょうかね?

Aベストアンサー

print<<"EOM";
データ
EOM

BLUEPIXYさんの提案されている
print<<'EOM';
データ
EOM
では動作が違いますので問題はでないはずです。
前者ではデータ中に変数($~)やメタ文字(\~)などがあれば展開されますが
後者ではそれを行いません。

唯一の例外は
EOM
という終了を示す行と全く同じ行がデータ中にある場合だけです。
それがデータ中に存在するようなら終了を示す文字列をあり得ないような文字列に変えてやれば大丈夫だと思います。

print<<'MuimiNiNagakuShiteDataNoNakaniArawarenaiYounisuru';
データ
MuimiNiNagakuShiteDataNoNakaniArawarenaiYounisuru

QシフトJISでURLエンコード

IEのJavaScriptのescapeで日本語をURLエンコードすると、UnicodeでURLエンコードしてしまいますが、シフトJISのままURLエンコードする方法はないのでしょうか?
文字列のシフトJISコードを取得する方法でも良いのですが・・・。

まったく、Unicodeなんて役に立たないものを無理矢理標準にしようとしないで欲しいナ!>MS

Aベストアンサー

こんばんは。

質問から5年以上が経過していますが、
私自身も大変気になっておりました。
今後、同じような悩みを持つ方がいらっしゃるかもしれませんので、
書き込ませていただきます。
やはりシフトJISのままエンコードする方法はないのかと
諦めかけていましたが、
あるライブラリを見つけました。

Escape Codec Library: ecl.js
というライブラリです。
私の方で試してみたところ、IE、FireFox、Netscape7のいずれでも
うまく動作しました。
参考URLご覧下さい。

参考URL:http://nurucom-archives.hp.infoseek.co.jp/digital/escape-codec-library.html

QJavaScriptでのPerl起動

度々、失礼します。
安易にここで質問しようとは考えていないのですが・・・

フォームの外に起動ボタンがあって、
フォームの中のチェックボックスの値を次のCgiに引渡したいのですが、
(アンカー(ボタン)のOnclickでJavaScriptを起動しています。)
チェックボックスの内容を渡す方法が分かりません。

どんな方法でも構いませんのでご存知の方、お教え願います。
お願いいたします。

Aベストアンサー

補足を読ませてもらいましたが、要するに
「フォーム外のボタンを押したとき、MODEとdflgの値を後からくっつけて送りたい」ということですね?

actionの要素に直接パラメータを加えても送信データには反映されません。
フォーム内にMODEとdflgのinputタグをhiddenで作っておき、ボタンを押した後に個別に書き換えます。

document.msgform.MODE.value="DEL";
document.msgform.dflg.value="";

とすれば良いでしょう。
actionは"./MailList.cgi"だけで良いです。

なお、フォームの中にいくつsubmitボタンがあっても構いません。

Qセルに入力されている文字列をUTF-8形式にURLエンコードする方法

Excelでセルに入力されている文字列をUTF-8形式にURLエンコードする方法を探しています。

下記のURLでShift-JISにURLエンコードできるものは提供されているのですが、
UTF-8に変換できるものは見つかりませんでした。

http://www.vector.co.jp/soft/winnt/net/se369699.html

どうぞよろしくお願いいたします。

Aベストアンサー

> このソースはVBAを立ち上げてコピペかなにかで使用するのでしょうか、
> それともJScript用にエディタか何かで記述するのでしょうか…

■ マクロ(VBA)で使う場合の手順

1. Excel起動
2. [Alt]+[F11] キーを押して Visual Basic Editor(以下 VBE)起動
3. VBE メニューで [挿入]-[標準モジュール] をクリック
4. 3. で開いたスペースに #4 の以下のコードをコピー&ペースト
  ただし、このサイトは URL を投稿すると前後に?記号がくっつく
  ので、除去して下さい
5. VBE を閉じる
6. A1 セルに適当な文字を入れ、[Alt]+[F8] を押してマクロ実行

■ワークシートで使う場合の手順

1. 1.~5.まではマクロで使う場合と同じ
2. ワークシートに戻る
3. A1 セルに適当な文字を入力
4. B1 セルに次の数式を入力
  =UrlEncode(A1)

QJavaScriptの計算結果をPerlに取込みたいが

Perlで作成したCGIの中で、JavaScriptのファンクションを使っていますが、この計算結果をPerlに取込みたいのですが、うまくできません。基本がわかっていないので、よろしくご教授お願いします。

Aベストアンサー

こんにちは。御質問の文面からは詳細が分からないので、一般的なことを申しているかと思いますが…。javascriptにはsubmit()メソッドがありますので、計算ファンクションでフォーム内テキストボックスにでも計算結果を入力させ、それをsubmit()でCGIに送り込んではいかがですか。submitボタンを別に作成して、それを押して送り込むこともできますが、submitメソッドをファンクション最後に入れておけば1アクションで済みますよね。

http://javascriptist.net/ref/form.submit.htm

"javascript cgi"で検索したら以下のようなQ&Aもありました。

http://okwave.jp/qa4553428.html

> 基本が分かっていないので

CGIとJavascriptを使ってページを試作するような教科書を読んで学習されてはどうでしょうか。また、以下のような書籍もあります。

http://www.amazon.co.jp/JavaScript-CGI%E3%83%8F%E3%82%A4%E3%83%96%E3%83%AA%E3%83%83%E3%83%89%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E2%80%95Web%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E8%8D%92%E6%8A%80-%E6%9C%AB%E6%B0%B8-%E6%94%BF%E6%98%AD/dp/4886487181/ref=sr_1_2?ie=UTF8&s=books&qid=1255450451&sr=8-2

こんにちは。御質問の文面からは詳細が分からないので、一般的なことを申しているかと思いますが…。javascriptにはsubmit()メソッドがありますので、計算ファンクションでフォーム内テキストボックスにでも計算結果を入力させ、それをsubmit()でCGIに送り込んではいかがですか。submitボタンを別に作成して、それを押して送り込むこともできますが、submitメソッドをファンクション最後に入れておけば1アクションで済みますよね。

http://javascriptist.net/ref/form.submit.htm

"javascript cgi"で検索し...続きを読む

QApacheのURLエンコード

URLエンコードで悩んでおります。
LinuxのApache1.3系では URLエンコードはGETで正しく処理できますが、
WindwosのApache2.0系では正しい値が取得できません。

ちなみにPOSTは漢字でも両方処理できました。

URLエンコードでApacheの設定で注意しないといけない点がありましたら
教えて下さい。


はてな ではLinuxのようです。
Apache/1.3.27 (Unix) (Vine/Linux) mod_perl/1.29
http://d.hatena.ne.jp/keyword/%c5%d4%b1%c4%c2%e7%b9%be%b8%cd%c0%fe?kid=930

Aベストアンサー

正しい値が取得できない、というのは具体的にどういう意味ですか?

漢字コードの違いなんですかねぇ?

QPerlの中でJavaScriptを使用したいのですが。

Perlのプログラム?の中で、JavaScriptを挿入したいのですが、
その際、どのように記述したらよいのですか?

Aベストアンサー

こんな感じ

print <<EOL
<script language='JavaScript'>
<!--

-->
</script>
EOL

この場合、\nは要りません


人気Q&Aランキング