• ベストアンサー
  • すぐに回答を!

メール転送でPHPの正規表現です。

sakuraサーバーで、mailfilterを使用して、パイプでメール転送しようという魂胆です。 http://ameblo.jp/topepe/entry-10325428465.html ※PHPにて正規表現を使って整形してメール転送しようと思っています。 #!/usr/local/php/5.2.17/bin/php-cgi <?php $content = null; $fp=fopen("php://stdin",'r') or die('File Open Error'); while( !feof($fp) ){ $content .= fgets( $fp ,1024); } mb_language("japanese"); mb_internal_encoding("UTF-8"); mb_send_mail("xxx@example.com","subject",$content); ?> のような簡単な転送では成功しています。 そこでpreg_replaceでメールヘッダーを削ったり、本文中の日本語句を削除してから転送しようとしているのですが、preg_replaceをかけるとすべて消えてしまいます。 ◎英数字だけの正規表現(/\A(.*?).jp/sなど)の場合はうまく動きます。 ×日本語が入ると駄目です。(/\A(.*?).受信者/usなど) sakuraの場合、パイプで動かすPHPファイルはEUC+LFでないと動きません。 なので $content_utf8 = mb_convert_encoding($content,"UTF-8","EUC-JP"); $patturn_utf8 = mb_convert_encoding("/\A(.*?)受信者/us","UTF-8","EUC-JP"); $c = preg_replace($patturn_utf8,"",$content_utf8); mb_send_mail("xxx@example.com","subject",$c); などとしていますが、駄目です。 preg_matchだとメールすら転送されません。 ※ヘッダーを削るだけならPEARもありだと思いますが、本文のもろもろを削るので、 PEARがあろうが、preg_replaceを使いたいことには変わりありません。 できればPEARはインストールしないでただの正規表現で行きたい、という段階です。 なにかヒントはありますでしょうか。 sakuraサーバー php/5.2.17 php-cgi PHPファイルはEUC+LF

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数238
  • ありがとう数2

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

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

> sakuraの場合、パイプで動かすPHPファイルはEUC+LFでないと動きません。 > なので > > $content_utf8 = mb_convert_encoding($content,"UTF-8","EUC-JP"); PHPファイルがEUCだからといって、 stdinから取り込んだ文字列がEUCに自動変換されている訳ではありません。 $c= mb_detect_encoding($content); mb_send_mail("xxx@example.com","subject",$c); して確認してみてはどうでしょう。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

mb_detect_encodingが当たりました!!! ありがとうございます。 プロセスは回答いただいた通りなので特記しません。 その後、メールの整形で文字コードの変換をしまくってpreg_replaceを多様したら思い通りになりました。 とても助かりました。ありがとうございます。

関連するQ&A

  • preg_replaceの正規表現を教えて下さい。

    preg_replaceの正規表現を教えて下さい。 元:'あいうえお<meta content=\"text/html; charset=Shift_JIS" />かきくけこ' 後:'あいうえお<meta content=\"text/html; charset=utf-8" />かきくけこ' というように、charset= に続く部分を preg_replaceで置換したいのですが、スキル不足でできません。 $a = 'あいうえお<meta content=\"text/html; charset=Shift_JIS" />かきくけこ'; $p = "/<meta.*charset=([^\"']+)[^>]/i"; $x = preg_replace( $p, "utf-8", $a ); とやってみましたが、$xには、全く期待通りの結果は得られませんでした。 この置換を実現できる正規表現を教えて下さい。

    • ベストアンサー
    • PHP
  • 【PHP】preg_replace() で正規表現が正常に動かない?

    PHP5利用者です。 preg_replace() が思い通りに動かないため困っています。 マルチバイト文字及び正規表現を使おうとした場合動作がおかしいのです。例えば、 「 . 」は任意の1文字とされていますが、 $str = preg_replace("/第.回/", "第3回", "今日は第*回目です。"); 等と書いても何も置換されません。 これは一体どういうことなのでしょうか? 文字コードはUTF-8です。 お詳しい方、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPの正規表現について

    // URLエンコード $str =~ s/([^\w ])/'%' . unpack('H2', $1)/eg; $str =~ tr/ /+/; これをPHPの関数を使った方法と使わなかった方法が知りたいです。 また、正規表現で、ereg.., preg.., mb_eregがありますが、この違いの詳細が知りたいです。

    • ベストアンサー
    • PHP

その他の回答 (1)

  • 回答No.2
  • yambejp
  • ベストアンサー率51% (3827/7415)

他人から送られてくるメールのエンコードは何か指定できません 仕方ないので、まずはメールヘッダ内の Content_Transfer_Encoding を抽出して、その値でmv_convert_encodingしてみてください

共感・感謝の気持ちを伝えよう!

質問者からのお礼

なるほど! 確かにメールの文字コードまで考えていませんでした、、、 ありがとうございます。かなりの大大ヒントになりました!!! ※参照にきた方へ:文中のmv_convert_encodingはmb_convert_encodingっすね。

関連するQ&A

  • PHP 正規表現

    はじめまして^^ 現在、PHPでプログラムを作っています。 そして、文字列の置き換えをする機会があり、 正規表現をつかうことになりました!! 置き換えに使う関数は、mb_ereg_replaceです! ある条件にあった部分の文字列を置き換えしたいと思っています。 そして、いろいろとやっていきましたら、あるひとつの壁にぶつかりました。。 例えば、PHPでは、正規表現の部分を [^文字]とやると、『文』と『字』という文字列以外にマッチという意味になるらしいのですが、 『文字』という文字列以外にマッチ、というふうに、表現したい場合は、 どう表現すればよいのですか? [^(文字)]とか、その他いろいろ、 自分なりに、色々ためしたのですが、うんともすんともいいません、、 どなたか、わかる方教えて下さいm(_ _)m

    • ベストアンサー
    • PHP
  • PHPでの正規表現

    PHPでの正規表現に関する質問です。 function makeAk($value){ return preg_replace("/(?<![一-龠+ぁ-ん+ァ-ヴ+a-zA-Z0-9'\"#@=:;])@([一-龠+ぁ-ん+ァ-ヴ+a-zA-Z0-9_]{1,15})/u", "@<a href=\"mypage.php/\\1\">\\1</a>", $value); } 上記のコードでmypage.phpに\\1ではなく、パラメーター(?id=$post['id']のような)を振りたいのですが、 どうしたらうまくいきますでしょうか。 よろしくお願いします。

    • 締切済み
    • PHP
  • 文字列全体に対する置き換え [正規表現]

    正規表現での文字列全体に対する、マッチ箇所 への置き換えについて、アドバイスをもらえないでしょうか。 parlでいうg修飾子はphpには無く、 例えば、[preg_match]は[preg_match_all]という関数で対応出来ますが、 置き換えを行う[preg_replace]には[preg_replace_all]がありません。 それに類する関数も無いように思います。 これに関して、PHPではどのように対応すれば良いのでしょうか。

    • ベストアンサー
    • PHP
  • 正規表現

    正規表現に疎いので質問させてください。 $param = ereg_replace('/?$', '', $_SERVER['REQUEST_URI']); これをpreg_matchで書くとどうなりますか? よろしくお願い致します。

    • 締切済み
    • PHP
  • 正規表現について

    HTMLファイルを読み込み、特定の文字列にリンクを付けて出力したいのですが上手くいきません。 例: <img src="./seiki_hyougen.gif" alt="正規表現についての説明">更に正規表現を知りたい方は、<a href="special.html">正規表現の詳しい説明</a>をクリックして下さい。  ↓正規表現をキーワードにしてリンクを付けたい。 正:<img src="./seiki_hyougen.gif" alt="正規表現についての説明">更に<a href="seiki_hyougen.html">正規表現</a>を知りたい方は、<a href="special.html">正規表現の詳しい説明</a>をクリックして下さい。 誤:<img src="./seiki_hyougen.gif" alt="<a href="seiki_hyougen.html">正規表現</a>についての説明">更に<a href="seiki_hyougen.html">正規表現</a>を知りたい方は、<a href="special.html"><a href="seiki_hyougen.html">正規表現</a>の詳しい説明</a>をクリックして下さい。 尚、下記URLのサンプルを参考にしてスクリプトを作成しています。 http://php.oss.eznetsols.org/manual/ja/function.preg-split.php $r = preg_split('((\/a>)|(<a))', $html, -1, PREG_SPLIT_DELIM_CAPTURE); for ($i = 0; $i < count($r); $i++) { if ($r[$i] == "<a") { $i++; continue; } $r[$i] = preg_replace( "/(正規表現)/i", "<a href='seiki_hyougen.html'>\\1</a>", $r[$i] ); } return join("", $r); この(正規表現)の部分で上手い正規表現を使えばalt="×××"の中にリンクタグが入らないようにできるのでは?と思っているのですが・・・。 どうか、良い方法を教えて下さい。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 今日の<h1>(.*)</h1>です。正規表現で質問があります。

    mb_ereg("今日の<h1>(.*)</h1>です。",$a,$b) で、<h1>~</h1>の間の文字をすべて抜き取りたいのですが、 抜き取ってくれません。 抜き取り先のHTMLはUTF-8で記述されていたので、 mb_internal_encodingでUTF-8に phpにファイルもすべて、UTF-8で記述したのですが、 どうしても抜き取ってくれません。 正規表現に間違いがあるのでしょうか? 何かアドバイスいただけませんでしょうか?

    • ベストアンサー
    • PHP
  • 正規表現について

    PHPにおける正規表現についての質問なのですが、 preg_match('#^/user/(?P<id>[^/]+)$#', $string) 第一引数の正規表現がいまいち理解できません。 ご教授のほど宜しく御願いします。

    • 締切済み
    • PHP
  • エスケープ文字そのものにマッチさせる正規表現

     お世話になっております。  PHPの正規表現でエスケープ文字\そのものにマッチさせる正規表現がなかなか作れません。Perl互換のpreg_replaceなども試してみましたがダメでした。エスケープ文字そのものを削除したいのですが、どうしたらよいでしょうか? $value = ereg_replace ('\\', '', $value);//ダメでした。 $value = preg_replace ('/\\/', '', $value);//同様にダメでした。 $value = preg_replace ('/[\\]/', '', $value);//同様にダメでした。  文字列中に\が入っていたり、単独で\があった場合は必要ないので削除するといった感じです。 $value = ereg_replace ('[][}}{)(!"#$%&\\~|*+,/\^\'<>`;:?\\=]', '', $value); これでいけるかと思ったのですが、\だけ残ってしまいます。最後辺りの\\で\文字それ自体にマッチするかと思うんですが…。 わかる方がいらしたらおしえてください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPの正規表現による文字列置換について

    下記のような文字列から「abcde」のみを変数に格納したいのですが、正規表現に苦戦しています。 http://example.com/detail.php?p=abcde.php 取得したい「abcde」のみが毎回変わり、その前後は固定です。 preg_replace()を使うのがいいのだろうなと思い、いろいろやってみているのですが、 なかなかマッチさせることができません。 どうかご教示頂けますでしょうか。

    • ベストアンサー
    • PHP
  • 2つの正規表現の違いは?

    次の正規表現を使った置換の違いがよく分かりません。 $strString="abcd<!--s_1-->うほほ<!--e_1-->efg"; echo preg_replace("/<!--s_1-->.*<!--e_1-->/","<!--s_1-->なんと<!--e_1-->",$strString); $strString="abcd<!--s_1-->うほほ<!--e_1-->efg"; echo preg_replace("/<!--s_1-->.*?<!--e_1-->/","<!--s_1-->なんと<!--e_1-->",$strString); .*  と .*? なんですが、どういったところで違いがでるのでしょうか?

    • 締切済み
    • PHP