No.5ベストアンサー
- 回答日時:
本題の \に関しての回答は、ほとんどしてませんのでスルーでお願いします。
> header("Content-Disposition: attachment; filename=\"" . $filename . "\"");
これを書いた張本人の俺が説明もなしに、ソースぶん投げっぱなしにしたのが良くなかったみたいで申し訳ないです。
既に 一通り説明されているようですし、俺が口を出すと 余計混乱させてしまう気もするのですが、一応 書いてみます。
> でも。。。どうして¥””と二回も”があるのでしょうか・・・。
最初の\"が、「文字としての"」で、次の"は 「文字列を括る為の"」です。
どちらかというと "\"" で 1セットです。
ダブルクォートで括られたダブルクォートという事です。
ちなみに、更に 混乱させる事を書いちゃっていいでしょうか?
そちらのソースに合わせたので、この書き方なだけで、本当は 俺なら 微妙に別な書き方します。
header("Content-Disposition: attachment; filename=\"" . $filename . "\"");
↓
header('Content-Disposition: attachment; filename="' . $filename . '"');
シングルクォートとダブルクォートが、混在してますので注意してください。
シングルクォートで括る事によって、ダブルクォートをエスケープさせずに使用できます。
シングルクォートもダブルクォートと同じような使い方が出来るものですが、シングルクォートの場合、変数を展開しなかったりしますので、ご注意を。
bm_hiroさんまたのご回答ありがとうございます!
最初が文字としての””次が文字列を括るための”はわかりました。^^
つまり"”test.mp3"" ってやってるんですよね。
filename="test.mp3" では動くけれどfilename=$filenameではもちろん動かない、それでfilename=" .$filename." なぜか動かない・・・。
filename="".$filename."" 基本こんな感じ・・・?(あるいはfilename="'$filename.'" )
エスケープ処理を施してfilename=\"".$filename."\"
・・・なんとなくわかってきました。
filename="" 必ず””が必要。filenameに$filenameを入れるには$filenameに ””を付けることが必要。というわけで二回必要なんですね。
わかりました^^
No.4
- 回答日時:
>header("Content-Disposition: attachment; filename=\"" . $filename . "\"")
これも同じような話です。
$filename と言う変数の値をダブルクォート「"」で括りたいのです。
例えば、$filename に「hoge.txt」と言う値が入っていたとしたら、headerの内容を
Content-Disposition: attachment; filename="hoge.txt"
にしたいわけです。
もっと単純な例で書きましょう。
""
↑
例えば、このダブルクォートの間に文字列を入れたいんだけど、入れたい文字列がダブルクォート1文字「"」だったらどうすればよいでしょう?
""" だとエラーになります。
で、答えは、"\"" です。
要するに
「"」は本来は文字列リテラルを括る特殊な記号なんだけど、\を前に付けているから、ただの「"」と言う文字列として扱ってね。エラーにしないでね。
とPHPにお願いしているわけです。
※言語によっては、""" でもOKだったりします。
重ね重ねありがとうございます!
よくわかりました。とっても勉強になりました^^
でも。。。どうして¥””と二回も”があるのでしょうか・・・。
また改めて質問します。
No.3
- 回答日時:
本当はANo.1さんの回答が全てなのだが、理解を助けるために少し補足説明しよう。
\ (円マークまたはバックスラッシュ)が文字列の中で使われると、文字として表せない文字を表現する事になる。
文字として表せないものの例:
1.改行 (\n)
2.ダブルコーテーション (\")
3.シングルコーテーション (\')
4.円マーク自身 (\\)
1は、たとえばこんな事をしてもだめなわけだ。
$str = "あああいいい
ううう
えええ";
ではどうするかという事で、
$str = "あああいいい\nううう\nえええ";
こうなる。「改行」という概念を円マークと半角小文字のnという2文字で表現できる訳だな。
そうすると2もわかるだろう。文字列を表す記号がダブルコーテーションである以上、
$str = "あああ"いいい";
とするとPHPは「あ」と「い」の間にある「"」が文字列の終わりを意図しているのか、文字列の中にダブルコーテーションを入れたいのかが分からない。なのでこうする。
$str = "あああ\"いいい";
これでPHPは「\"」と「"」によって文字列の終わりかダブルコーテーションを文字列中に入れたいのかが判断できる訳だ。
3番がなぜ必要かというのはもう少し理解を深めてからだろう。いつかステップアップしようとするとき、PHPにおいて文字列とはどう表現するのか(ダブルコーテーションでくくる以外にどう表現できるのか)という事を調べてみていただきたい。
4番ももうばっちりだな。円マークが次に続く文字と合体して何かを表す以上、円マーク自身を意味する別の表現が必要になる。それが円マーク円マークって訳。
$str = "あああ\nいいい";
は、あああ改行いいいを表すが、
$str = "あああ\\nいいい"
は、あああ円マークエヌいいいと解釈される。
No.2
- 回答日時:
いわゆるエスケープ処理です。
どの言語にも多かれ少なかれあります。http://php.net/manual/ja/language.types.string.php
今回の例示ですと、ダブルコーテーションのくくりのなかにある
ダブルコーテーションを\をつけてエスケープしてます。
たとえば
print "a\"b";
とすれば出力は「a"b」と表示されます。
これをエスケープしないと
print "a"b";
となり、文字列をくくっているのか文字列として表示したいのかわかりません。
(文法的にエラーになります。)
No.1
- 回答日時:
¥マーク(バックスラッシュ)は、エスケープ文字と言って、特殊な制御文字を文字として識別するためのものです。
例えば、ご質問の元になったのは、こんな例をご覧になったからではありませんか?
↓
// PHP
echo "Hello, World!\n";
\nと書いた場合、これは「改行」を意味するようになります。
上記の例であれば「Hello, World!」と標準出力に表示した後、さらに改行を表示します。
因みに、このバックスラッシュは、C言語でもPerlでもJavaでもPHPでも同じ意味を持ちます。
(元々はC言語から来た概念)
↓
/* C言語 */
printf("Hello, World!\n");
// Java ※
system.out.print("Hello world!\n");
※Javaの場合はprintlnを使う場合が多いので、この書き方はあまりしませんが。
ありがとうございます!
自分がみたやつはちょっと違うみたいなんです???
header("Content-Disposition: attachment; filename=\"" . $filename . "\"")
これなんですが、意味がわかんないのです。
教えてくださいませんか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字列の括弧について(初心者)
-
VBSで"をエスケープする文字は?
-
VBAのコマンドボタンの文字列の...
-
メッセージボックスで1025文字...
-
Accessの文字数を調べたい
-
文字化け変換方法
-
Nvuで作成したhtmlをコピペして...
-
phpの正規表現でstyle="●●"を削...
-
ToolTipTextの改行はできないの...
-
ダイアログにおける改行
-
VBAでCSVをExcelに取り込む時に...
-
エクセルのCOUNTIFが正しくカウ...
-
ソースコードの1行が長いとき...
-
preg_matchの正規表現で
-
mb_ereg_replaceに関して
-
PHPで<a>タグ内からURLと文字を...
-
ラベル(スタティックテキスト)...
-
【VBA】エクセルで最後の不要な...
-
eclipseより、タスク・タグの使...
-
マクロでセル内の改行を削除す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルコーテーション(
-
文字列の置換をCStringで(C++)
-
VBSで"をエスケープする文字は?
-
○分から○時間○分に変換
-
文字列のアスタリスク置換
-
入力文字に\\マークが入ってい...
-
文字列の括弧について(初心者)
-
c# string型の変数に、ダブルク...
-
近似した文字列を置換するエク...
-
PHPでjavascriptを書き出すとき...
-
文字列から、特定の文字を削除...
-
PHPの¥
-
空白文字のカンマへの変換について
-
REGEXREPLACE関数について、
-
$text = "
-
PHP 文字列から必要な部分を抜...
-
PHPの正規表現について
-
dirnameでパスが正しく取れない...
-
str_replaceで文字化け
-
PHPで「,」を「, 」へ置換した...
おすすめ情報