質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

930閲覧

PHPの変数の中の文字列がシングルクォートで囲まれている扱いになっている場合の対処法

Web_akira

総合スコア34

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2019/07/12 04:12

編集2019/07/12 04:40

PHP の文字列の扱いについて。

改行コードを置換したいのですが、うまくいかず。
デバッグしてみても分からないのですが、
文字列をダブルクォートで囲んだ場合は、うまくいきました。

下記のように結果が異なるのが分かっています。

php

1// シングルクォートで囲むとNG 2$str = '1000円\n1000円\n200円\n'; 3$text = str_replace("\n", ",", $str); 4var_dump($text); // 1000円\n1000円\n200円\n 5 6// ダブルクォートならOK 7$str2 = "1000円\n1000円\n200円\n"; 8$text2 = str_replace("\n", ",", $str2); 9var_dump($text2 ); // 1000円,1000円,200円,

変数に既に入っている文字列ですが、
ダブルクォートで囲んでいる扱いには出来ないものでしょうか?

<追記>
PHPでメール本文から指定した行を抽出して、変数に入れ、ダブルクォート扱いにして処理を続けたいのに、
変数に入れた途端、それがシングルクォート扱いになっているので困っています。

ダブルクォート扱いにしてくれる関数、またはそのような処理方法があれば教えて頂きたいです。

上記の処理ですが、実際にはメール本文から、指定の範囲の行の文字列を変数に入れています。

普通に文字列をダブルクォートで入れれば、想定通りに動くのに、
変数に入れたものがなぜシングルクォートで囲んだ扱いになるのか? が不思議です。
後から変換できるものでしょうか。
困っています。
ご回答よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

シングルクォートの変換なのだからstr_replace側もシングルクォートすればよい

PHP

1$str = '1000円\n1000円\n200円\n'; 2$text = str_replace('\n', ',', $str); 3var_dump($text);

投稿2019/07/12 04:26

yambejp

総合スコア114767

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Web_akira

2019/07/12 04:36

> yambejp さん ありがとうございます。出来ました!
Web_akira

2019/07/12 04:47

> yambejp さん PHPで「抽出した文字列」はシングルクォートで囲んだ文字列の扱いになると思った方がいいのでしょうか?
guest

0

こういう方法でいかがでしょうか。

PHP

1$str = '1000円\n1000円\n200円\n'; 2$text = str_replace('\n', ",", $str); 3var_dump($text); // 1000円,1000円,200円, 4 5$str = '1000円\n1000円\n200円\n'; 6$str= str_replace('\n', "\n", $str);//ダブルクォートで囲んでいる扱いに 7$text = str_replace("\n", ",", $str); 8var_dump($text); // 1000円,1000円,200円,

投稿2019/07/12 04:33

jk233

総合スコア55

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Web_akira

2019/07/12 04:38

> jk233さん ダブルクォーテーションで囲んでいる扱いする方法まで、ありがとうございます。
guest

0

シングルクォート内で特殊文字が展開されないのは分かっています。

分かってないんでしょ^^;

php

1<?php 2$str = '1000円\n1000円\n200円\n'; 3$text = str_replace('\n', "\n", $str); 4var_dump($text); 5 6// ダブルクォートならOK 7$str2 = "1000円\n1000円\n200円\n"; 8$text2 = str_replace("\n", ",", $str2); 9var_dump($text2 );

展開されなきゃ、ただの文字列。

投稿2019/07/12 04:30

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/07/12 04:32

かぶったね^^;
guest

0

シングルクォート内では\nでは「改行コード」として認識されないためです。

参考:PHPマニュアル:文字列#引用符

引用符をリテラルとして指定するには、バックスラッシュ () でエスケープする必要があります。 バックスラッシュをリテラルとして指定するには、二重 () にします。 それ以外の場面で登場するバックスラッシュは、すべてバックスラッシュそのものとして扱われます。 つまり、\r や \n といったおなじみのエスケープシーケンスを書いても特別な効果は得られず、 書いたままの形式で出力されます。

投稿2019/07/12 04:14

編集2019/07/12 04:16
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Web_akira

2019/07/12 04:19

シングルクォート内で特殊文字が展開されないのは分かっています。 PHPで指定した行を抽出して、変数に入れ、ダブルクォート扱いにして処理を続けたいのに、 変数に入れた途端、それがシングルクォート扱いになっているので困っています。
m.ts10806

2019/07/12 04:22

質問内容からはそこまでくみ取れませんでした。追記しておいてください。 「PHPで指定した行を抽出して、変数に入れ、ダブルクォート扱いにして処理を続けたい」とのことですが、 文字列は文字列なので、そもそも変数に入れる前に改行コードとして入ってきていないのでは?という推測はできますが、実際のデータが提示されないと的確なアドバイスにはなりません。
m.ts10806

2019/07/12 04:23

「メール本文」というところから、改行コードは実はWindows系で採用される「\r\n」のほうでは?とか
Web_akira

2019/07/12 04:45 編集

既に解決しましたが、改行コードは変換して、「\n」になっている文字列です。 また、デバッガで「\n」が入っていることも確認しています。
m.ts10806

2019/07/12 04:47

はい。回答者からすると質問に書いてあることが全てなので、 「調べたこと」「試したこと」はなるべく具体的に書くようにしてください。 本当に何も調べてない試してない人との区別は他者にはできませんので。
m.ts10806

2019/07/12 04:49 編集

ただ、結局今回はどこにも「PHPでメール本文から指定した行を抽出して、変数に入れる」コードがないので、対処療法でしかなく、根本解決には至っていないと思っています。 私の「2019/07/12 13:22」のコメントの2行目以降の懸念点ですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問