• ベストアンサー
  • 困ってます

\マークの正規表現

こんにちは。 メールフォームかた取得したデータに何故か\マークが付属する場合があります。(例ソラ→ソ\ラ)他のサーバーで同じ物を試してみても何もならないので、サーバー側の問題なのかなぁ~とか思っているのですが、サーバーは何も出来ないとのことなので、正規表現で\マークを削除しようかと思います。 現在メールフォームからのデータを取得する際に foreach($_POST as $key => $val){ $sy[$i] = mb_ereg_replace("\\","\\1\\2", $val); $i++; } としています。 実行すると Fatal error: Call to undefined function: mb_ereg_replace() とエラーメッセージが出ます。 \マークの正規表現の仕方が間違えているのでしょうか? CGIモードの動作とサーバーのページには書いていたのですが、何処かCGIモード用に変えないといけないのでしょうか???すみませんが、ご教授の程をよろしくお願いします。

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

  • 回答数4
  • 閲覧数624
  • ありがとう数6

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

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

追加です。 .htaccessが使えない場合は、エスケープシーケンスをはずすstripslashesと云う関数があります。 foreach($_POST as $key => $val){ $sy[$i] = stripslashes($val); $i++; }

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

質問者からのお礼

ありがとうございます。 .htaccessは使えないので, stripslashesを使用したら、希望通りに動きました。 たすかりました。 ありがとうございました。

関連するQ&A

  • php 正規表現で、\マークを取り除くには?

    php で ereg_replace関数を使って¥マークを取り除きたいのですが、 ereg_replace("\\", "",$str); と記述すると Warning: ereg_replace() [function.ereg-replace]: REG_EESCAPE in C:\xampp... とエラーになってしまいます。 どうすれば正規表現により円マークを取り除くことができるのでしょうか?

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

    変数の文字列を範囲指定して削除しようとしています。 正規表現を使って範囲指定したいのですが、うまくいきません。 <span class="shimei"> ~ </span> というのは正規表現でどのように書くのでしょうか? $name = mb_ereg_replace("<span class=\"shimei\">.*</span>","",$name); これはどこが間違っているのでしょうか?

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

    正規表現を使った置換えでどうやったらいいのか悩んでいます。 やり方は、カンマで区切られた数字や英字の列をその先頭だけ残して別の記号(?など)に変換するというものです。 変換例 222,1,33333 は 2??,1,3???? へ置換え 55,22aa は 5?,2??? へ置換え 6 は 6 へ置換え(つまりそのまま) このような置換えをすることは可能でしょうか。 こういう置換えはand条件が使えないと無理なのかなとも思ったりしています。 ただ正規表現にはand条件は無いようですし。(or条件はあるようですが) mb_ereg_replaceを使って明示していただけると助かります。 もちろん複数行になっても問題ありませんし、mb_ereg_replaceでは無理という場合に別の関数を使っていただいても結構です。 よろしくお願いします。

    • ベストアンサー
    • PHP

その他の回答 (3)

  • 回答No.3

エラーメッセージはmb_ereg_replace()という関数はありませんよと云っています。 マルチバイト文字列関数(mbstring)は拡張モジュールですが、そのサーバにインストールされていないようです。 POSTされたデータがエスケープシーケンス(\が付加)されているのは、PHPの設定でmagic_quotes_gpcがOnになっているからです。 .htaccessが使えるなら、php_flag magic_quotes_gpc Offと記述すれば、エスケープシーケンス(\が付加)されません。

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

  • 回答No.2
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)

>undefined function は、その関数が利用できませんということです。 php.iniでmb関連の設定はしておられますか

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

質問者からのお礼

phpinfo() で確認したところ mbstringが全てno valueになっています。 やっぱり使えないんですかね・・・。 ereg_replaceでメールアドレスなどで置換をするといけますから・・・ php.iniはいらうことができないので、今回は諦めます。 何か違う方法を探してみます。 ありがとうございました。

  • 回答No.1
  • tkfm
  • ベストアンサー率36% (27/73)

\を削除するだけですよね? ・元データの表を読み取るようなcgiを作りたいのでしょうか? ・$_POSTで他にreplaceしたいものを定義しているのでしょうか? mb_ereg_replaceの使い型をよく理解されたほうが良いと思います.>参考URL

参考URL:
http://pukiwiki.ishinao.net/?%A4%CF%A4%C6%A4%CA%A5%C0%A5%A4%A5%A2%A5%EA%A1%BC%C5%AA%A5%AD%A1%BC%A5%EF%A1%BC%A5%C9%A5%EA%

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

質問者からのお礼

ありがとうございます。 確かにmb_ereg_replaceの使い方をほとんどわかっていないので、勉強します・・・。

関連するQ&A

  • 正規表現

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

    • 締切済み
    • PHP
  • 正規表現について教えてください。

    正規表現について教えてください。 JavaScriptでプログラミングを行っています。 その中で文字列に対しゼロサプレスを行いたいと思い 調べた結果、正規表現を使用する以下のコードで 実現可能なことが分かりました。 val.replace(/^0+([0-9]+.*)/, "$1") コードを記述し実行すると確かに可能なのですが 正規表現を調べてみても何故これでゼロサプレスが可能なのか よく理解できませんでした。 申し訳ありませんが初心者でも理解できるように説明して頂けないでしょうか。 宜しくお願いします。

  • PHP 正規表現

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

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

    正規表現を使用して文字列の置換(ereg_replace)をしたいと思うのですが、 うまくいかず悩んでおります。。 以下の文字列があったとします。 【AAA】【BBB】【CCC】DDD 文字列の中から先頭から始まる【】でくくられたものだけ(【AAA】)だけ削除して、 結果を【BBB】【CCC】DDDとしたいのですが、正規表現でどのようにヒットさせればよいのか分りません。 ※【】の中にくる文字はAAAとは限りません。 お手数ですがご教授頂けますでしょうか。

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

    正規表現について困っています。 $text = '&a=000&b=111&c=222'; mb_ereg('&b=(.*?)&', $text, $result); 上記のように、スタートを&b=とし、エンドを&とすれば、'b=111' の中の '111'  は抽出できます。 ところが、$textには次のようなパターンもあります。 $text = '&a=000&b=111'; この場合、エンドを示す文字が文末のために存在しませんので、 mb_ereg('&b=(.*)', $text, $result); とやれば抽出できます。 やりたいことは、上記の2つのパターンに対応する正規表現を1行で記述したいのです。ORを表す表現を調べていろいろ試したのですが、うまくいきません。 よろしくご指導のほどお願いいたします。

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

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

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

    phpの初心者です。 あるサンプルのプログラムを読んで勉強していたのですが、正規表現の使い方がよく解らず本やサイトで調べましたが、それでも解らなく。 下記の場合ですと同様な結果になるのでしょうか? ereg("(.*)#(.+)",$aa,$bb) また、正規表現に詳しいサイトがあればご紹介頂けますか? 本当に申し訳ありません。

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

    秀丸の正規表現 http://pc.dearie.jp/hidemaru/replace/14.html 上記URLでメールの正規表現について解説があります。 [A-Za-z0-9\-\.\_]+@[A-Za-z0-9\-\_]+\.[A-Za-z0-9\-\.\_]+ この正規表現でメールの検索をおこなっています。この正規表現は理解出来ます。 .*([a-z0-9\-\.\_]+@[a-z0-9\-\_]+\.[a-z0-9\-\.\_]+)([^a-z0-9@\.\-\_]+).* キャプチャを使って正規表現でメールアドレスをマッチしているのは理解できます。 なぜ置換で、「\1,」とやっても、メールアドレスのみを取得できないのでしょうか? 実際に秀丸エディタを使ってやってみましたが、メールアドレスのみ取得することができませんでした。 検索ではメールアドレスにマッチするのに、なんでキャプチャが正しく動かないのかがわかりません・・・

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

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

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

    お世話になります。 ereg_replace で書いた正規表現による置換処理を、 preg_replace に置き換えようとしています。 (preg_replaceの方が処理が速いとマニュアルにあったので) ところが、preg_replaceでの正規表現検索がうまくいかないで困っています。 基本的には、ereg_replaceの正規表現部分を//で囲んでいるだけです。 具体的には、下記のような処理を書いています。 間違いがあれば、ご指摘いただけましたら幸いです。 //### うまくいっている ereg_replace のパターン ここから ### $html=file_get_contents('template/temple.html'); //ひな形読み込み $search='\{dokuji tag\}.+\{_dokuji tag\}'; $replace=''; $html=ereg_replace($search,$replace,$html); //不要部分の削除 //### うまくいっている ereg_replace のパターン ここまで ### ↓ //### うまくいかない preg_replace のパターン ここから ### $html=file_get_contents('template/temple.html'); //ひな形読み込み $search='/\{dokuji tag\}.+\{_dokuji tag\}/m'; $replace=''; $html=preg_replace($search,$replace,$html); //不要部分の削除 //### うまくいかない preg_replace のパターン ここまで ### //### 置き換えるソース('template/temple.html') ここから ### <!-- {dokuji tag} --> <tr> <td nowrap><strong>タイトル:</strong></td> <td> <input type="text" name="name" size="80" value="{name}" /> </td> </tr> <!-- {_dokuji tag} --> //### 置き換えるソース('template/temple.html') ここまで ### よろしくお願い申し上げます。

    • ベストアンサー
    • PHP