• ベストアンサー

「クォート」「エスケープ」「エンコード」の違い

違いがよく分からないのですが、 用語的には、同じ意味なのでしょうか? 例えば、以下の使い方は、意味が通ってるでしょうか? ・「クォートされるべき文字」をクォートする ・「クォートされるべき文字」をエスケープする ・「クォートされるべき文字」をエンコードする

  • re999
  • お礼率61% (476/777)
  • PHP
  • 回答数3
  • ありがとう数5

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

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

>意味が通ってるでしょうか? あっているといえば(通っている)、あっているし、違うといえば違う。 その3つ、全部違う事です。似た場面で、同じ効果を持つので、同じように使われる事があるだけで、違う事を指しています。 例えば「エスケープ」 これは http://ejje.weblio.jp/content/Escape が訳ですが、 プログラム言語(HTMLやJavaScriptなどスクリプトやマークアップ言語も)では、 http://hodade.adam.ne.jp/seiki/page.php?study_escape このような意味です。 「これらの文字を、通常の文字列として認識させる場合は、エスケープしてください」 特定の予約語などキャラクター文字は、その言語の書式上では特殊な意味をもってしまうので、「エスケープして」つまり、「はずれるとか逃れる」という意味で使う。 同じ効果として、「クォート」すると言う操作もある。これは上記のエスケープと違い、文字列(数字とかキャラクターも含む)を特定のマークで囲う。行為の事を指す。 そのまま、「クォート」しないで記述すると、文字列として扱わずに、プログラムの命令文として効果を発揮していまったり、文字列を、文字型として定義させ、認識させることです。 これを大きく言えば、上記の「はずれるとか逃れる」の意味に含まれるが、用途は全く違います。 エンコードは、上記2つと全く違い、元の文字を特定の方式にしたがって、別の文字列に置き換える事をさします。効果としては、エスケープ効果にも役立ちます。 例えば、文字列にスペースを含む物が渡す事ができない場合、エンコードすると、スペースも文字列として変換されるので、エスケープした効果と同じになります。 結果の効果から見ると、質問の3つの文は、特定のシュチュエーションを考えれば成り立つが、それぞれ意味が違うので、ちゃんと何をすることが、エンコードと言うのか認識してから文献をよみましょう。

re999
質問者

お礼

回答ありがとうございました。 >あっているといえば(通っている)、あっているし、違うといえば違う。 >その3つ、全部違う事です。似た場面で、同じ効果を持つので、同じように使われる事があるだけで、違う事を指しています。 >エンコードは、上記2つと全く違い、元の文字を特定の方式にしたがって、別の文字列に置き換える事をさします。効果としては、エスケープ効果にも役立ちます。 説明、大変分かりやすかったです。 勉強になりましたー

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4835/10236)
回答No.3

クォートとエスケープは現状では同じ意味として使われています。 本来は、 クォート:「決まった文法の中で特別な意味を持った文字の特別な意味をなくしその文字そのものと扱いたい時に行うこと」 エスケープ:「文字に元の意味で無い別の意味を与えるときに行うこと」 と全く別なのですが。 クォートの例: ・カンマを区切りで無くカンマという文字そのものとして扱うために引用符で囲む  CSV形式で、 abc,def,"hi,jk",lmn ・引用符の中で引用符自体を引用の終わりを意味するので無く引用符文字自体として扱いたい  VisualBasicだと、"abc""def" の用に"でクォートする  他の多くの言語だと、"abc\"def" のように\でクォートする エスケープの例:多くの言語で文字列の中で \n が改行を表す。\がエスケープ文字 どちらも、" " ' 'で囲ったり、 \ を前置したりするので、混同されて現在は両方ともエスケープと書かれていることが多いです。 エンコードにはいろいろな意味がありますが、クォート・エスケープと混同されるような意味でのエンコードというと、「決まった文法の中で特別の意味を持った文字を、その文字そのものとして扱いたいので別の表現で表すこと」という感じでしょうか。 例:HTMLの中で < はタグの始まりを表すので、< と言う文字自体を表したければ &lt; とエンコードする

re999
質問者

お礼

回答ありがとうございました。 >クォートとエスケープは現状では同じ意味として使われています。 >本来は、 >クォート:「決まった文法の中で特別な意味を持った文字の特別な意味をなくしその文字そのものと扱いたい時に行うこと」 >エスケープ:「文字に元の意味で無い別の意味を与えるときに行うこと」 >と全く別なのですが。 この説明、大変分かりやすかったです。 参考になりましたー

回答No.2

もう一つおまけ。 エンコードをネットで調べると http://search.yahoo.co.jp/search?p=%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89&aq=-1&oq=&ei=UTF-8&fr=ie8sc&n=10&x=wrt デジタル信号化、暗号化と言う意味であることが分かる。 暗号化(エンコード(符号か))、復号化(デコード) と言うこと。 しかし、 http://search.yahoo.co.jp/search?p=%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89%E9%96%A2%E6%95%B0&aq=-1&oq=&ei=UTF-8&fr=ie8sc&n=10&x=wrt なんて検索すると、Wikiとは違う説明の話になる(だからと言ってそのページWikiは間違っているわけではない)。 そう、その分野では、違って使われる事が多いので、プログラム言語で言っているのか、映像などデジタル化での話しなのか文脈から判断するしかない。 http://www.phpbook.jp/func/string/index5.html http://pbs.darkgray.net/tips/tipshow.php?textserial=4 質問内容も、それぞれの単語の英語の意味で捉えてしまうと、みんな同じにみててくるが、ちゃんと、それぞれプログラム言語では、なにをすることが「クォート」「エスケープ」「エンコード」なのかネット上で調べれば、すぐわかることです。

re999
質問者

お礼

追加説明、ありがとうございましたー

関連するQ&A

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

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

  • シングルクォートのエスケープ

    インターネットで調べていて、 「postgreSQLでシングルクォートをエスケープするには`\'を使用する」と書いてあるページ (http://host01.dia.ne.jp/pgsql/doc/ja-doc/jman/manl/sql.l.html) があったのですが、 xxx char(16); xxx:= ''`\'aaa`\'''; とやってもxxxに「'aaa'」が入ってくれません。 わたしの解釈違いなのでしょうか? 正しくはどうしたらよいでしょうか。よろしくご指導ください。

  • 文字列中のシングルクォートにエスケープシーケンスは必要?

    C言語でダブルクォートで囲まれた文字列内で使われる、「\」で始まるエスケープシーケンスがありますよね。例えば、 「\n」 ⇒ 改行 「\t」 ⇒ タブ 「\"」 ⇒ ダブルクォート 「\\」 ⇒ バックスラッシュ などですが、C言語のリフェレンスを見ると「\'」(シングルクォート)や「\?」(クエスチョンマーク)なども載っていました。でもこれらの文字は、実際はエスケープシーケンスを使わなくても、ちゃんとコンパイルされ表示もされます。 「'」や「?」をC言語の文字列内で使うには、公式には「\」が必要なんでしょうか?

  • HTMLは、シングルクォートかダブルクォートか?

    HTMLで、<img src="images/spr2002.gif" width=130 height=130 border=0 alt="写真"> などクォート文字列がよくでてきますが、文法的にはシングルクォートかダブルクォートのどちらでもOKなのでしょうか? 大抵のHTMLエディタではダブルクォートを採用している事が多いようですが、私的には、PerlやPHPのprint文などでクォート文字列をエスケープする必要がないので、シングルクォートが良いような気がするのですが、みなさん、どちらが望ましいと思われますか?

    • ベストアンサー
    • HTML
  • シングルクォート、ダブルクォート使用方法

    初心者で勉強中です。 相当素人な質問なんですがよろしくお願いします。 Perlで使われる、シングル、ダブルクォートの自分の認識なのですが ・ダブルクォートは変数やエスケープ文字を評価してくれる。 ・シングルはそのまま文字列として出力される。 ということだと思っているのですがただ、『print』の後の表示させる文字列、数字などがシングルで囲まれていたりダブルだったり、またどちらも使わない場合などあるのですがこの使い分けはどのようにすれば良いかわかりません。 単に文字列の場合でもダブルクォートで囲っていたりと・・・ 以下の例ですと use strict; print "Content-type: text/html\n\n"; my $hensu = 1; print $hensu."<br>\n"; $hensu = "moji"; print "$hensu"; 上記をブラウザ出力すると 1 moji となるということなのですが、数字であればダブルクォートで囲まなくても展開されるということでしょうか?また後ろの2行の $hensu = "moji"; print "$hensu"; とは、どちらもダブルクォートで囲む必要があるのでしょうか。 法則性についてどなたか分かるかた、おしえていだだけますでしょうか。

    • ベストアンサー
    • Perl
  • parse_ini_fileでダブルクォートを含む値

    parse_ini_fileで読取る設定ファイルでは、 ダブルクォートを含む値を用いることはできないのでしょうか。 ダブルクォートを含んだ値を記述したかったのですが、 設定ファイルのパースエラーになるか、途中で値が切れてしまいました。 以下を試しました。 (PHP 5.0.4 です。) <テストコード> <?php print_r(parse_ini_file("test.ini")); ?> <設定ファイル test.ini の内容> (ダブルクォートを含む) key=val"ue --> 値がvalになる (ダブルクォートをエスケープ) key=val\"ue -->値がval\になる (全体をダブルクォートで囲んで中のダブルクォートをエスケープ) key="val\"ue" -->値がval\になる (全体をダブルクォートで囲んで中のダブルクォートを二連化) key="val""ue" -->パースエラーが発生し、値がvalになる (全体をシングルクォートで囲む) key='val"ue' -->値が'valになる マニュアルで以下の文が気になったのですが・・。 ( http://jp.php.net/manual/ja/function.parse-ini-file.php ) ----- 引用 ここから ----- 次の文字 {}|&~![()" は、キーで使ってはいけません。 また、値の中で特別な意味を持ちます。 ----- 引用 ここまで ----- ダブルクォートが「値の中で特別な意味」を持つ文字として 指定されていますが、具体的にどのような意味を持つのか分かりませんでした。 ですが、キーとしては禁止されているものの、値に含まれる文字としては禁止されていないようだったので・・。 どなたか詳しい情報ご存知の方いましたらご教授ください。

    • ベストアンサー
    • PHP
  • Perlで変数中のエスケープされた特殊文字を展開

    Perlで、変数に既に格納されているエスケープされた特殊文字を、もとの文字に展開するには どのようにしたらよいでしょうか。 つまり、\t という値で格納されているのをタブ文字にしたり、\\ という値であれば\の一文字に するという事です。 ダブルクォートで定義すれば展開されると思いましたが、展開は変数の代入時に行われるだけで、 既に変数中にエスケープされて入っているものはダブルクォートを使い変数を囲んだりしても展開されません。 下記は簡単な例でやろうとしてる事を示したものです。 add変数に\tというタブを意味するエスケープされた特殊文字を含んでいるとして、その\tを タブとして展開し、abc defのようにさせたいのですが、abc\tdefと入ってしまいます。 $ cat unescape.pl #!/bin/perl $add = '\tdef'; #シングルクォートで代入すると、もちろんエスケープされたまま代入される #$add = "\tdef"; #ダブルクォートで代入すると代入時にタブへ展開される #$add = $ARGV[0]; #本当はAGRVからエスケープ特殊文字を含んだ文字列を取りたい。ARGVから代入すると、シングルクォートの時のようにそのまま代入される $tgt = 'abc'; print "add: " . $add , "\n"; print "before: " . $tgt . "\n"; $tgt .= "$add"; #既にエスケープされた形で代入されているものを、ダブルクォートで囲んで使っても展開されない print "after: " . $tgt . "\n"; $ perl unescape.pl add: \tdef before: abc after: abc\tdef

    • ベストアンサー
    • Perl
  • <Perl>URLエンコードみたいに、一括でエスケープシーケンスをしたい

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

    • ベストアンサー
    • Perl
  • perlのシングルクォートとダブルクォートの置き換えについて

    perlのシングルクォートとダブルクォートの置き換えについて お世話になります。 現在、perlにて開発を行っているのですが、一つ問題に当たってしまいました。問題になっているのは、文字列を扱う部分です。perlにおいて文字列はシングルクォートに囲まれたものと、ダブルクォートに囲まれたものがあると思うのですが、この両者の違いは、内部に書かれた変数等を展開するか否かだったと思います。 実は開発の途中でこのシングルクォートで囲まれた文字列を、ダブルクォートに囲まれた文字列に変更しなければいけなくなりました。つまり $test = 'aaa';  を  $test = "aaa"; としたいのです。これってperlの仕様的に可能なのでしょうか? かなり悩んだのですが、どうしてもわかりませんでした。 ちなみに、なぜこの処理が必要なのかというと、HPの製作をしているのですが、設置したフォームからその内容を得るというプログラムを書いた際に、そのフォームの内容がシングルクォートでしか得られないからです。シングルだとそののちの処理に影響が出てしまうのです。 だれかご存じないでしょうか。よろしくおねがいします。

    • ベストアンサー
    • Perl
  • PHPの文字列のエスケープについて

    php.iniの設定で「magic_quotes_gpc = On」なっており、htmlentities($str, ENT_QUOTES)で、ダブルおよびシングルクオートを共に変換します。 しかし、シングルクオートがエスケープされて、「'」になるのですが、これを「'」に変換しなければなりません。 (そんな依頼を受けて、プログラミングをしていますが、全くうまくいきませんorz。) 単純に考えて、シングルクオートをエスケープしなければよいと思うのですが、 フォームのデータを受けとるときに、シングルクオートをエスケープしなければならないとマズイことでもあるのでしょうか? 変な質問ですが、宜しくお願いします。

    • ベストアンサー
    • PHP