mb_ereg_replaceに関するエラー

このQ&Aのポイント
  • 開発時には問題のなかったmb_ereg_replace関数が、レンタルサーバー上でエラーが発生しています。
  • 具体的なエラーメッセージは「Call to undefined function mb_ereg_replace()」です。
  • ソースコードではGETで渡された文字列をDBに登録されているデータを検索する処理を行っています。
回答を見る
  • ベストアンサー

mb_ereg_replaceに関して

こんにちは。お世話になっております。 開発時(PHP5.1.4)では何ら問題なかったものが、レンタルサーバー上(PHP5.0.4)へアップロードしたら、mb_ereg_replace関数の部分でエラーが出て対処に困っております。 エラー文 Call to undefined function mb_ereg_replace() $key = $_GET['key']; $key = addslashes($key); $key = mb_convert_encoding($key, 'EUC-JP', 'auto'); $key = mb_ereg_replace(" ", " ", $key);//ココでエラー $arr = explode(" ",$key); 上記は実際のソースの一部ですが、GETで渡された文字列(検索キーワード、key=○○)をDB(MySQL)に登録のあるデータを検索する。といった結果を願い設置しております。 借りたサーバ(共有)は、(適切な言葉じゃないかも知れませんが)PHPはCGIのもと動かしているようですが、これも原因の一つなのでしょうか? お忙しいなか恐縮ですが、ご指導のほど宜しくお願い申し上げます。

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • racci
  • ベストアンサー率64% (9/14)
回答No.2

'--enable-zend-multibyte' '--with-pear' '--prefix=/usr/local' 'i386-portbld-freebsd6.1' の部分は関係が無いように思います。 --disable-mbregex とかになっていれば、mb_ereg_replace関数が使えなくても当たり前なのですが、そうなっていないんですよね。 ちょっとネットで調べてみましたが、今回の件と似たような情報は見つかりませんでした。 インストールがきちんとされていないのだと思いますが、私には原因がよく判りません。レンタルサーバの業者に相談してみて下さい。申し訳ないです。

sadacha
質問者

お礼

racci様 こんばんは。検索までして調べて下さったのですね。有難う御座います。 関数が使えないなどと、思いもしない状況に戸惑っていしまいますが、 週明けにでもサーバ会社へ相談してみます。 お忙しい中いろいろと有難う御座いました。

その他の回答 (1)

  • racci
  • ベストアンサー率64% (9/14)
回答No.1

mb_convert_encoding は動くけれど、mb_ereg_replace は「Call to undefined function」になるんですよね。 phpinfo を表示して、 Multibyte (japanese) regex support enabled のようになっているか調べてみてください。

sadacha
質問者

お礼

racci様 はじめまして、こんばんは。早速のお返事に感謝いたします。 で、早速借りているサーバーのphpinfoを調べてみたところ、 mbstringの項目は、以下の3つのみの表示しかありませんでした・・。 開発環境では、racci様の仰る通りになっていたのですが・・。 Multibyte Support enabled Multibyte string engine libmbfl HTTP input encoding translation enabled ちなみに、このレンタルサーバにあるphpinfoでは、表示が開発環境と若干違い、はじめの項目にあるConfigure Command の中に 、 '--enable-zend-multibyte' '--with-pear' '--prefix=/usr/local' 'i386-portbld-freebsd6.1' という表示がありましたが、これも起因されていることなのでしょうか?勉強不足ではありますが、急を要しているため是非とも貴重なアドバイスを頂きたく思っております。お忙しい中恐縮ですが、引き続きご指導いただければ幸いに思います。

関連するQ&A

  • mb_ereg_replace での文字変換

    PHPでフリーの掲示板を制作中です。 目立たせようとする記号を削除しましたがうまく動きません。 $html = mb_ereg_replace('△', '', 'あああ△あああ'); ・希望結果 ああああああ ・実際の結果 ああ 文字コードは全て EUC-JP です。 また以下を追加するとエラーがでました。 $str="あああ△あああ"; $str = mb_convert_encoding($str, 'EUC-JP', 'auto'); ・エラー Warning: mb_convert_encoding() [function.mb-convert-encoding]: Unable to detect character encoding in そもそもmb_convert_encodingを使わない方が良いのか使い方が悪いのかも解りませんがアドバイスお願いします。

    • ベストアンサー
    • PHP
  • mb_ereg_replaceについて

    マルチバイトでの置き換えについて質問です。現在は以下のように str_replaceで置き換えしており文字化けはないのですがマルチバイト 対応のmb_ereg_replaceで実行したほうがいい事を知りました。 以下現在のソースです。 // 検索文配列 $search = array("{#aaa#}", "{#bbb#}", "{#ccc#}"); // 置き換え文配列 $replace = array("あああ", "いいい", "ううう"); // 置き換え $str = str_replace($search, $replace, $str); 単純にstr_replaceをmb_ereg_replaceにしてみたのですがエラーに なってしまいました。 置き換えしたい文字が複数あるのでできれば検索文字、置き換え文字を 配列として使用したいのですがどうすればいいのでしょうか? ちなみにですが文字コードはutf-8です。

    • ベストアンサー
    • PHP
  • 配列をmb_ereg_replaceで一気に置き換えるには?

    お世話になります。 mb_ereg_replace関数を使い文字の置き換えを行っているのですが、置き換 えるものが多く、1回で置き換えられないかと思い、質問をさせて頂き ます。 // 検索文配列 $search = array("__tome__", "__hame__", "__hoge__"); // 置き換え文配列 $replace = array("$tome", "$hame", "$__hoge__"); // 置き換え $str = mb_ereg_replace($search, $replace, $str1); とやると Warning: mb_ereg_replace() expects parameter 2 to be string, array given in on line というエラーが出てしまい、うまく置き換える事が出来ません。どのようにすればうまく置き換えられるでしょうか? ご教授のほどよろしくお願いします。

    • ベストアンサー
    • PHP
  • mb_eregについて

    初歩的な質問かもしれませんが、 DB内の1つのカラムに 「a1,a3,a5,a7,a9」という値が格納されてる時、 if(ereg("a9",$str)){ echo "ok"; } という「ereg」を使った条件式でしたら、正常に値が返るのですが、 if(mb_ereg("a9",$str)){ echo "ok"; } と、「mb_ereg」を使用した時には 「Call to undefined function: mb_ereg()」 というエラーが返ってくるのですが これは何が原因なのか、お分かりになる方はいらっしゃいますでしょうか?

    • ベストアンサー
    • PHP
  • ereg 処理で行き詰ってます

    mb_eregでの処理がどうもうまくいかず、助言していただければ幸いです。 $ageに10代や20代といった変数が入っています。 if(mb_ereg('0代$',$age)){ $age = mb_ereg_replace('0代$',"?",$age); } という感じで語末を1?や2?に変更したいのですが、うまく動いてくれません。 また、eregでの処理なのですが下記のように if(!ereg('[0-9\?]',$FORM[age])){ Error_Msg("入力された年齢の書式が間違っています"); } if(ereg('\?$',$FORM[age])){ $FORM[age] = ereg_replace('\?$',"0代",$FORM[age]); } としているのですが、20代や30代と直接入力した場合でもError処理されず通ってしまいます。 0~9、?以外の文字が入力された場合にError処理させるにはどうすればいいでしょうか?

    • 締切済み
    • PHP
  • メールの内容が文字化けします・・・

    <? function sendmail($to,$from,$from_name,$title,$message){ /* EUCコードへのエンコーディング */ $to = mb_convert_encoding($to , "EUC-JP","EUC-JP,UTF-8,SHIFT-JIS,ASCII,JIS"); $from = mb_convert_encoding($from , "EUC-JP","EUC-JP,UTF-8,SHIFT-JIS,ASCII,JIS"); $title = mb_convert_encoding($title , "EUC-JP","EUC-JP,UTF-8,SHIFT-JIS,ASCII,JIS"); $message = mb_convert_encoding($message , "EUC-JP","EUC-JP,UTF-8,SHIFT-JIS,ASCII,JIS"); /* 改行コード変換(CR+LFへ変換) */ $to = ereg_replace("\r", "", $to); $to = ereg_replace("\n", "\r\n", $to); $from = ereg_replace("\r", "", $from); $from = ereg_replace("\n", "\r\n", $from); $from_name = ereg_replace("\r", "", $from_name); $from_name = ereg_replace("\n", "\r\n", $from_name); $title = ereg_replace("\r", "", $title); $title = ereg_replace("\n", "\r\n", $title); $message = ereg_replace("\r", "", $message); $message = ereg_replace("\n", "\r\n", $message); /* メールヘッダ生成 */ $header = "From: ".$from_name." <".$from.">\n"; $header .= "Reply-To: ".$from_name." <".$from.">\n"; /* メール本文生成 */ $message = mb_convert_kana($message,"KV"); /* 送信メッセージ言語設定 */ mb_language("Japanese"); /* メール送信処理 */ $rcd = mb_send_mail($to,$title,$message,$header); return $rcd; } ?> 何が原因か分からないのです・・・。 教えていただければ嬉しいですm(__)m

    • ベストアンサー
    • PHP
  • mb_eregを使っての文字列検索、抽出について

    パターン="関数.+ます。" 上記パターンで、"関数"から"ます。"までを含む文字列を抽出する事は出来ました。が、 一番最初に出てくる"ます。"で検索をストップし、変数$matchに代入する事はできますか? (指定したキーワード"関数"以降の全ての"ます。"が変数に代入されてしまいます、最初に出てくる"ます。"まで抽出できれば充分なので。) キーワードやアドバイスがあればお教え下さい。 宜しくお願いします。 以下のプログラムで実行しました。 <?php //mb_eregについて $url="http://jp2.php.net/mb_ereg"; //アドレス指定 $result=file_get_contents($url);//取得 $text_contents=strip_tags($result);//タグを外す $sjis_text=mb_convert_encoding($text_contents,"SJIS","auto");//sjisに変換 echo("$sjis_text<br>");//本文出力 echo("----------------------------------------------<br>"); if(mb_ereg("関数.+ます。",$sjis_text,$match))//"関数"から"ます。"まで検索 echo("$match[0]<br>");//検索結果表示 ?>

    • ベストアンサー
    • PHP
  • 全角の”’¥を半角に変換したい

    PHPを勉強し始めた超初心者です。よろしくお願いいたします。 表題のとおり、PHPにて全角の”’¥を半角の"'\に変換したいのですが、うまくできません。 ----- A ----- $s = "”’¥"; mb_convert_kana( $s, "as" ); 結果:全て全角のまま。 ----- B ----- $s = "”’¥"; $s = mb_ereg_replace( '”', '"', $s ); $s = mb_ereg_replace( '’', '\'', $s ); $s = mb_ereg_replace( '¥', '\\', $s ); 結果:”’は半角になるんですが、¥は半角になりません。 なにか根本的に間違いがあるんでしょうか? あともう一つ、日本語環境について、 mb_language( "Japanese" ); mb_internal_encoding( "EUC-JP" ); mb_regex_encoding( "EUC-JP" ); mb_substitute_character( "none" ); mb_detect_order( "SJIS,EUC-JP,JIS,UTF-8,ASCII" ); と、ソースに指定しているのですが、ローカル環境がWindowsなので、ソースそのものはSJISになっていると思います。(コード体系管理できないテキストエディタ使用) しかしこれをそのままサーバーにアップしても、問題なく(文字化け等無く)print"サシスセソラリルレロ"; なども表示されるんですが、これはこれでいいんでしょうか? 以上、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • php5.3.3でeregをループ内で使用すると

    php5.3.3でeregをループ内で使用すると動作がとまり、エラーログにも何も出力されません。 10回目のループでなぜか動作がとまるようです。 $mail=""; $fp=fopen("php://stdin", "r"); while(!feof($fp)) $mail.=fread($fp, 10240); fclose($fp); $MailArray = explode("\n", $mail); $Counter = 0; $InputCheck = new InputCheck(); for ($i = 0; $i < count($MailArray); $i++){ if (strpos($MailArray[$i], "From: ") === 0){ $From = str_replace("From: ", "", $MailArray[$i]); $From = ereg_replace(">.*$", "", $From); $From = ereg_replace("^.*<", "", $From); $From = ereg_replace("\r", NULL, $From); if(!$InputCheck->isRightEMail($From)){ $i++; $From = str_replace("From: ", "", $MailArray[$i]); $From = ereg_replace(">.*$", "", $From); $From = ereg_replace("^.*<", "", $From); $From = ereg_replace("\r", NULL, $From); } } else if (strpos($MailArray[$i], "To: ") === 0){ $To = str_replace("To: ", "", $MailArray[$i]); $To = ereg_replace(">.*$", "", $To); $To = ereg_replace("^.*<", "", $To); $To = ereg_replace("\r", NULL, $To); if(!$InputCheck->isRightEMail($To)){ $i++; $To = str_replace("To: ", "", $MailArray[$i]); $To = ereg_replace(">.*$", "", $To); $To = ereg_replace("^.*<", "", $To); $To = ereg_replace("\r", NULL, $To); } } } 上記は空メールされたfromとtoを取得するものです。 eregをpregに変えれば問題なく動作します。 5.3以降からeregは非推奨になりましたが、使用することはできるようですが、ループ内で使用するとなぜか動作がそこでストップします。 非推奨の関数を使用すると動作が止まりエラーログにも出力されないことはよくあるのでしょうか? エラーログに出力されなかったため原因を特定するのに苦労しました。 eregなどの非推奨関数を使用した場合の不具合に関してご教示頂けると幸いです。 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • mb_convert_variables関数が見つからない。

    mb_convert_variables関数が見つからない。 環境:PHP Version 5.2.13 ネットからPHPテンプレートクラスライブラリをDLして組み込み開発をしているのですが、 mb_convert_variables()のところでエラーが出てしまいます。 内容は、   Fatal error: Call to undefined function mb_convert_variables() というものです。 PHPマニュアルで確認したらPHP5でも使用可能なようです。 何かiniファイルの設定が必要なのでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう