下記の $str の文言を1行にまとめたいと思ったのですが、どうすればできるか分からないことがあったので、アドバイスいただける方がいらっしゃいましたら、ご教示の程、よろしくお願いします。
なお、下記の条件を想定しています。
1. 行数は1行の事もあれば、複数行になる事もあります。
2. 行頭に空白文字が有る場合に連結したいと思います(下記のサンプルでは$strの2~4行目の行頭に空白文字があります)。
<?php
$str = 'text/plain; name="=?iso-2022-jp?B?GyRCJCIkJCQmJCgkKiQrJC0kLyQxJDMkNRsoQg==?=
=?iso-2022-jp?B?GyRCJDckOSQ7JD0kPyRBJEQkRiRIJEokSyRMJE0kTiRPJFIkVSRYJE4bKEI=?=
=?iso-2022-jp?B?GyRCJF4kXyRgJGEkYiRkJCQkZiQoJGgkaSRqJGskbCRtJG8kJCQmJCgbKEI=?=
=?iso-2022-jp?B?GyRCJCokcxsoQi50eHQ=?="';
// 上記を1行にして出力したいと思います。
// その際、行頭の空白文字は除去したいと思います。
echo $str;
?>
以上、よろしくお願いします。
No.1
- 回答日時:
んー、メールのヘッダーで よく見る感じの奴ですね。
こんなんじゃ、ダメって事なんですよね?
mb_language('ja');
mb_internal_encoding('UTF-8');
print mb_decode_mimeheader($str);
ご回答ありがとうございます。
おっしゃるとおりご提示のソースでは意図した動作とはなりません。
動作の流れとしては下記となります。
1. ヘッダ取得($str)
2. 正規表現で文字列のname="以降~最後までを取得(1行の$strは動作しますが、複数行だと駄目でした)
3. mb_decode_mimeheaderでデコード(これはすでに動作していると思います)
上記の関係上、一番効率が良いのは$strが必ず1行になるようにすれば良いと思い今回の質問をさせていただきました。
以上、よろしくお願いします。
No.2
- 回答日時:
んんんんん???何か また 俺が勘違いしてるんでしょうかねぇ。
。mb_decode_mimeheader()って $strが 複数行でも ちゃんと解析して答えを出してくれてるみたいですよ?
PHPのバージョンとかに依存するんですかね~
下記のソースで 表示されるもの↓
text/plain; name="あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへのまみむめもやいゆえよらりるれろわいうえおん.txt"
<?php
$str = 'text/plain; name="=?iso-2022-jp?B?GyRCJCIkJCQmJCgkKiQrJC0kLyQxJDMkNRsoQg==?=
=?iso-2022-jp?B?GyRCJDckOSQ7JD0kPyRBJEQkRiRIJEokSyRMJE0kTiRPJFIkVSRYJE4bKEI=?=
=?iso-2022-jp?B?GyRCJF4kXyRgJGEkYiRkJCQkZiQoJGgkaSRqJGskbCRtJG8kJCQmJCgbKEI=?=
=?iso-2022-jp?B?GyRCJCokcxsoQi50eHQ=?="';
mb_language('ja');
mb_internal_encoding('UTF-8');
print mb_decode_mimeheader($str);
?>
ご回答ありがとうございます。
今回最終的に欲しい値は下記となります。
あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへのまみむめもやいゆえよらりるれろわいうえおん.txt
その為、先頭の「text/plain; name="」や末尾の「"」は不要となります。
これについてはNo.1のお礼の動作の流れの2で実現できていると思います。
ただし、2の正規表現は下記となるのですが、$strが1行の場合は動作しますが、複数行だと途中でファイル名が切れてしまいました。
その為、$strが複数行の場合でも1行に変換する事が出来れば解決すると思い、今回ご質問させていただきました。
// 2の正規表現
preg_match('/name\s*=\s*"?([^"\s\r\n]+)"?\r?\n?/is', $str, $p_match)
// エンコードされた MIME ヘッダの文字列 str のファイル名部分(これがmb_decode_mimeheaderを実行する前に欲しい値となります)
$p_match[1]
以上、よろしくお願いします。
No.3
- 回答日時:
え~っと。
。。最終的に欲しいのが「あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへのまみむめもやいゆえよらりるれろわいうえおん.txt」なんですよね?「text/plain; name="あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへのまみむめもやいゆえよらりるれろわいうえおん.txt"」までは出来ているので、これから正規表現で 「text/plain; name="~"」の間を抜き出せばいいんじゃないん?って思うのですが。。。
ご回答ありがとうございます。
出来れば修正箇所は最小範囲にとどめたいと思っています。
ご教示いただいた方法では、下記の二箇所の変更が必要になると思います。
1. No.1のお礼の動作の流れの2の削除
2. No.1のお礼の動作の流れの3の後に正規表現追加
No.1のお礼の動作の流れの1以前と3以降は特に問題なく動作しているようなので、
その部分には手をつけることなく、対応したいと思います。
以上、よろしくお願いします。
No.4ベストアンサー
- 回答日時:
端的に、複数行にまたがる「name="・・・"」の中身をとりたいなら
s修飾子をつけてpreg_matchすればいいでしょう
<?PHP
mb_internal_encoding("EUCJP");
$str = <<<eof
test
test
text/plain; name="=?iso-2022-jp?B?GyRCJCIkJCQmJCgkKiQrJC0kLyQxJDMkNRsoQg==?=
=?iso-2022-jp?B?GyRCJDckOSQ7JD0kPyRBJEQkRiRIJEokSyRMJE0kTiRPJFIkVSRYJE4bKEI=?=
=?iso-2022-jp?B?GyRCJF4kXyRgJGEkYiRkJCQkZiQoJGgkaSRqJGskbCRtJG8kJCQmJCgbKEI=?=
=?iso-2022-jp?B?GyRCJCokcxsoQi50eHQ=?="
test
test
eof;
$pattern="/name=\"(.*?)\"/mis";
preg_match($pattern,$str,$match);
print $match[1]."<br>";
print mb_decode_mimeheader($match[1]);
?>
ご回答ありがとうございます。
ご教示いただいたソースを試した所、意図した動作になったと思います。
このたびはどうもありがとうございました。
以上、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP phpの imap_search で漢字コード 1 2022/09/06 17:32
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Excel(エクセル) Excel 値を返す数式についてです 3 2022/11/21 20:08
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Excel(エクセル) Excelの列から検索して該当する行を別シートに転記するVBA 2 2022/12/20 09:35
- C言語・C++・C# sprintf()の使い方について 1 2022/08/17 16:16
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのメールフォームの完了画面...
-
廣のjis変換で文字化け
-
10文字以降は非表示にしたいん...
-
送信したメールのタイトルが無...
-
sjisで書いているPHPとeucのM...
-
PHP・MySQLでデータベースを作...
-
SQL Serverで文字コードUTF-8
-
VBAのコマンドボタンの文字列の...
-
テキストファイルから改行コー...
-
C++で空Enterの入力を判...
-
csobjというタグについて
-
LaTeX: captionの中で改行した...
-
VC++ マルチバイト文字とUniCod...
-
JAVA System.out.println の ...
-
fgetsとsscanf
-
エスケープ文字の復帰(¥r)と...
-
VBAでCSVをExcelに取り込む時に...
-
VB.net テキストボックス半角文...
-
VB6でブラウザのページソースを...
-
C++のctime関数復帰値の改行
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字化け変換方法
-
phpのメールフォームの完了画面...
-
SQL Serverで文字コードUTF-8
-
PHPmailerでの添付ファイルの文...
-
SJISで取得した半角カナをUTF-8...
-
mb_convert_encoding で 一部の...
-
SJIS→UTF-8変換後の文字化けに...
-
PHP cURLでPOSTした値が文字化...
-
phpMyAdmin内での文字化け
-
mb_ereg_replaceに関して
-
RSSを取得すると文字化けする。
-
PostgreSQLからCSV形式でエクス...
-
【PHP】mb_convert_encoding...
-
mb_regex_encodingでエンコード...
-
postの文字化け防止について
-
小さいひらがな(っ、ょ、ぃ、ゃ...
-
UTF8メールがLotus Notesで文字...
-
mail()で送信したメールのタイ...
-
php自動返信メール本文の一部の...
-
phpでの文字エンコード
おすすめ情報