• ベストアンサー

エスケープ、エンコード ???

javascriptで、たとえば以下の文字列を(1)から(2)にしたいのですが可能でしょうか? (1)var text = 'ダブルクォーテーション""の前に円マーク'; (2)ダブルクォーテーション\"\"の前に円マーク' 用語として、エスケープ、エンコードなど言葉が思い当たるのですが、 違いなど理解できていないため、混乱しています。 javascriptにはどんなエスケープ関数があり、エスケープ関数はどんなことをするのか、またどんなエンコード関数あり、どういう働きをするのか知りたいです。

質問者が選んだベストアンサー

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

 エスケープとは、「回避する」という意味の言葉で、実行エラーを回避するために用いるものです。  たとえば "abc"def" このように文字列の途中にダブルクオートが入ってる文章は、どこが終端なのかはっきりしないため実行エラーになります。  これを回避するため、"abc\"def" とエスケープするのです。  エンコードとは、直訳すれば「暗号化する」という意味になります。  URL欄には通常、日本語が使えません。これはURLという概念自体が英語圏で生まれたものだからです。  そこで、日本語を簡単な暗号にしてURLの中に埋め込むことで、この問題に対応します。  またこのエンコードという言葉は、巨大になりがちな動画データなどを効率よく保存するために小さく整理する処理にも用いられます。

その他の回答 (1)

回答No.2

おっしゃるとおり、JavaScriptではエスケープとエンコードが、用語として一緒くたになっているので 関数名だけで探すと混乱してしまいます。 ビルドイン関数で escape(string) ってのがありますが、これはunicodeへのエンコーダです。 GETでフォームを送信したときにURLに出てくる、%u3044%u308D%u306F みたいな文字列に直します。 「エスケープ」は、ソースを記述するときにダブルクォートやシングルクォート、¥マークなどを正しく認識させるために 「\」をその前に入れてやることを指します。 これは、ソースを記述するときの話なので、JavaScriptに専用の関数があるわけではなく、 手動で「\」を記述、またはサーバ側の関数で処理することになります。 1つ余談を加えておきますと、エスケープの作業はJavaScriptに慣れていても面倒で厄介なことが多々あります。 そういうときは、scriptタグを使うと便利なことが多いです。 (あんまし有名なやり方ではないですけどね) こんな感じです ↓ <script type="text/plain" id="string0"> \n←ただの文字列として扱われる。 "'\ ←こういう記号も。 ただし、scriptタグ前後の改行もそのまま反映されるので注意 </script> <script type="text/javascript"> var str0 = document.getElementById("string0").innerHTML; alert(str0); </script> ちなみに、通常のエスケープでは、 (1) var text = 'ダブルクォーテーション""の前に円マーク'; // これは''の間に"が記述されているので\は不要です。このままでOK (2) \\\" で「ダブルクォーテーションの前に¥マーク」です。前2つで「\」、その後の \" が「"」です。

関連するQ&A

  • C# asp.net HTMLタグのエスケープ文字のエンコード・デコード

    htmlタグをエスケープされた文字列を送受信するASPXをC#で作成しています。 .NETでは、エンコード・デコード用のライブラリが用意されていますか?ない場合は どのように実現しますか? ・参考(JavaScriptでHTMLをエスケープ文字へエンコード) http://htmlconverttext.naglly.com/

  • escape関数を使ってgetでsubmit

    お世話になります。 javascriptを使ってgetでsubmitしております。 getなので日本語などはそのままURLへ渡してしまいます。 javascriptのescape関数を使うとエンコードしてくれますが、 使い方が分かりません。 下記ソースにescape関数を用い、 エンコードしてURLへsubmitしたいのです。 宜しくお願いします。 function submit_pg() { document.form1.action='#'; document.form1.method='GET'; document.form1.submit(); }

  • PHPのエスケープシーケンスに関して

    PHPで文字列内で(※だぶるクオーテーションおよびシングルクオーテーション)使用するエスケープシーケンスについて、質問です。 PHPでは例えば \(※バックスラッシュ)を文字列内に含めるときバックスラッシュを二つ続けて入力して print "\\"; 上記の用に記述することになると思いいます。 ただ、上記とは違い  print "  \ "; と上記のようにバックスラッシュの前後にスペースをおいて print することでバックスラッシュをエスケープせずに出力させることができます。 本当はものすごく基本的な動作だと思うのですが、 ちょとこの動きが理解できません。 オライリー本をみてもバックスラッシュはエスケープしないといけないと 記載があります。 よろしくご教授ください。

    • ベストアンサー
    • PHP
  • シフトJISのエンコード

    JavaScript で、 シフトJISのまま URLエンコードする関数(または 簡単な方法)はないでしょうか? 最近の JavaScript の escape でエンコードすると、日本語コードを 勝手に Unicode に変換してしまいます。 やはり、Unicode と シフトJISの対応表を持った関数を作らないと いけないのでしょうか? みなさんはどうしていますか?

  • ダブルクォーテーションを文字列として扱いたい

     初心者な質問で申し訳ありませんが、ダブルクォーテーション("")を  文字列として扱いたいのですが、どうもうまくいきません。  SQLなどだと、escapeって関数がありますよね?  VBにはそれに似たような関数はあるのでしょうか??

  • PHPのエンコードについて教えて下さい。本のサンプルに

    PHPのエンコードについて教えて下さい。本のサンプルに function h($var) { // HTMLでのエスケープ処理をする関数 if (is_array($var)) { return array_map('h', $var); } else { return htmlspecialchars($var, ENT_QUOTES); } } と書いてあり、もし配列だったらhtmlエンコードしてはいけず、配列ではなかったらhtmlエンコードするような意味だと思うのですがどうして配列だったらhtmlエンコードしてはいけないのですか??? お手数かけますが教えて下さい。お願いします。

    • ベストアンサー
    • PHP
  • JavaScriptでエスケープ。<script

    JavaScriptで、下記文字列(<script~</script>)を変数に入れ、処理後にdocument.writeしたいです。 <script type="text/javascript" src="http://hoge.jp/s/"></script> どのようにエスケープしたら良いでしょうか?

  • コマンドプロンプトでのエスケープ文字

    標記の通り、コマンドプロンプト上での エスケープ文字は何を入力すればよいのかで 困っています。 具体的には net use コマンドを利用して共有リソースに 接続しようとしているのですが、 その際に、パスワードに空白文字やダブルクォーテーションが含まれている場合、パスワードを そのままコマンドプロンプト上に打っても 所望の動作になりません。 特殊文字(|&<>等)はエスケープするのだとは思うのですが どの文字でエスケープすればよいのかどうかを 探しだすことができませんでした。 (「ダブルクォーテーションでくくる」や「^」を 前につけるというのはあるのですが、これらを 組み合わせてもパスワードに「 "|<>&」等が含まれている場合には対応できませんでした) どなたかご存知の方、よろしくお願いします。

  • PHPの文字列をJavascriptの変数にする

    PHPの変数に格納された文字列を、直接Javascriptの変数の一部として格納しようと考えています。 例:) <script> var txt = "<?php echo $text; ?>"; </script> しかし、$textにダブルクォーテーションなどの文字が含まれていると、スクリプト全体が破綻します。今のところ、PHPの中で、問題を起こしそうな文字列を変換するように処理しています。 例:) $text = str_replace("\\", "\\\\", $text); $text = str_replace("\"", "\\\"", $text); $text = str_replace("\n", "\\n", $text); これよりもスマートな方法(たとえば用意されている関数を使うなど)がありますでしょうか。

    • ベストアンサー
    • PHP
  • TEXT関数に書式記号を表示させる方法について

    エクセルのTEXT関数で””の中に書式記号を表示させる方法を探しています。 例えば =TEXT(1,"ymd-yyyymmdd") 表示させたい文字列は「ymd-19000101」なのに ymdが書式記号として「0011-19000101」と表示されてしまいます。 別個にして文字列を結合させる方法ではなく、ダブルクォーテーションの中に書く方法はあるのでしょうか?エスケープ文字のようなものはあるのでしょうか? 宜しくお願いします。