BBSのエラー「eregi_replace」がうまくいかない

このQ&Aのポイント
  • BBSのカスタマイズでエラーが発生しています。特に「eregi_replace」の部分に問題があるようです。
  • エラーが発生する原因は、テキストエンコーディングがutf-8の場合に起きるようです。
  • 問題の部分を削除すると正常に動作するが、httpをリンクにしたいため困っています。
回答を見る
  • ベストアンサー

BBSでエラー「eregi_replace」あたりがおかしい様子

BBSのカスタマイズをしているのですが、 なんどやってもうまくいきません。 エラー内容によると function Http($mess){ return eregi_replace("(https?|ftp|news)(://[[:alnum:]?S?+?$???.%,!#~*/:@&=_-]+)","<a href=?"??1??2?" target=?"_blank?">??1??2</a>",$mess); } のあたりがおかしい様子です。 この部分を削除してUPすると正常に動作しますが、httpをリンクにさせたいし、困っています。 運営しているサイトがutf-8ですので、テキストエンコーディングをutf-8にしているとエラーになります。shift-JISなら問題ないです。 shift-JISでもいいんですが、ただ、なぜutf-8だとエラーに??と困惑しております。 googleなどで調べたんですが、思った回答を得れませんでした。 どなかたよきアドバイスをお願いいたします。

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

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

  • ベストアンサー
  • zikaku
  • ベストアンサー率78% (69/88)
回答No.3

#1です。 またまた、すいません、 下の文は違うサイトの回答と混ざってしまいました。 お詫びとして、回答します。(たしになららいかもしれませんが、PHPは、よく改造しますが・・・) shift-JISからテキストエンコーディングをutf-8 するときに文字化けしてませんか? 使えるサイトでよく、文字化けの報告があります。 http://www.shiftweb.net/material/Nucleus/nucleus1.html ↑みたいなサイトでよくあります。 私はプログラムには¥を良く使うので (例:オートリンク) function auto_link($str){ return eregi_replace("(https?|ftp)(://[[:alnum:]\S\+\$\?\.%,!#~*/:@&=_-]+)","<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>",$str); } ?が多いと見づらいです。(笑) ↑見たいな感じでよく使いますが・・・・ 私からの質問です。 プログラムのすべてが?なんですか?

参考URL:
http://homepage2.nifty.com/hobbit/html/utf8.html#why
nihilworks
質問者

お礼

プログラムがまだよくわからなかったので、zikaku様のfunction auto_link・・・をそのまま差し替えてみたら、問題なく動くようになりました。 何が原因だったのか把握できてませんが、?がおかしかったのかもしれませんね、、。 あ、チルダが変になることが多いので、もしかしたらMac OS Xだったからかも、、。 難しいですねぇ。もっと勉強してマスター目指します!  本当にありがとうございました。

その他の回答 (2)

  • zikaku
  • ベストアンサー率78% (69/88)
回答No.2

あ! utf-8でしたか? 間違いました。 私の勘違いでしたm(__)m

  • zikaku
  • ベストアンサー率78% (69/88)
回答No.1

え~と ”が、おかしいです。 >function Http($mess){ return eregi_replace("(https?|ftp|news)(://[[:alnum:]?S?+?$???.%,!#~*/:@&=_-]+)","<a 注意> <aの前にある”が href=?"??1??2?" target=?"_blank?">??1?? 注意> ?の後ろのある”で閉じてしまっています。 2</a>",$mess); } ですから、 function Http($mess){ return eregi_replace("(https?|ftp|news)(://[[:alnum:]?S?+?$???.%,!#~*/:@&=_-]+)","<a href=?'??1??2?' target=?'_blank?'>??1??2</a>",$mess); } ↑みたく href以降の”(4箇所)を’に変更すれば良いと思いますが・・・ 詳しいことは、プログラムを全部見ないと・・・ 分かりません。

関連するQ&A

  • PHP5.3以降のereg_replaceについて

    PHP5.3以降にアップデートしたところ、ereg_replaceで書かれている箇所で警告が出るようになりました。 マニュアルを見た限りではpreg_replaceへの移行が推奨されているようなので、preg_replaceに書き換えようと思い、http://melma.com/backnumber_129036_1571788/を参考に、2つ目のパラメータの前後に/を付けましたが、画面に何も表示されず、どのように記述すれば良いか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 なお、ソースは下記となります。 また、記述はhttp://okwave.jp/qa/q849820.html?&status=true&errcode=&msg=&qid=849820を使用させていただいており、やりたいことはURLに自動的にハイパーリンクを付加したいという状況で、ereg_replaceを使用すればできております。 <?php $proto = "私のブログはhttp://www.hoge.com/です。"; $proto = ereg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>",$proto); //$proto = preg_replace("(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)","/<a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>/",$proto); print $proto; ?> 以上、宜しくお願いします。

    • ベストアンサー
    • PHP
  • mysqlの関数でereg_replace

    レコードから、特定のドメインを含むURLを消去する、といった動作をmysqlの関数で実現しようと考えてます。phpで言うところのereg_replace()のような関数がmysqlであるかどうかということです。 以下のように"bbs"というテーブルの"com"というフィールドからURLに値する文字列を消去するSQL分を実行しましたがこれは動作しませんでした。 update bbs set com = replace(com,regexp '(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)','') where com regexp '(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)'; replace関数の第二引数にregexpを使用することができませんでした。(やり方が間違ってるのでしょうか?) phpのereg_replaceを使用してフィールド"com"に含まれるURLを消去していくというやり方で実現は可能なのですが、動作の軽さやソースのシンプルさを考え、SQL文で実現することを考えてます。 mysqlのヴァージョンは3.23.58です。 よろしくお願いいたします。m(__)m

  • 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
  • エンコード指定でコンパイルエラー

    以下のソースで、UnsupportedEncodingExceptionと、 コンパイルエラーが発生します。 byte[] sjisBytes; // 適当なバイト列を入れる String string = new String(sjisBytes, "Shift_JIS"); // エラー String s; // 適当な文字列を入れる byte[] b = s.getBytes( "Shift_JIS" ); // エラー サポートされている他のエンコーディング(UTF-8など)を入れても、 同じエラーになります。 原因がわかる方いらっしゃいますでしょうか?

    • ベストアンサー
    • Java
  • preg_replace

    $img_ref = '<a target="_blank" href="http://aaa/aaa/.com/'.$_POST[bbs].'/img/'.$_POST['key'].$imgnum.$tail.'">'; 上記みたいな画像掲示板のスクリプトの画像URLリンク先を示す箇所で、preg_replaceを使って「http://」と「aaa/aaa.com」の間にbbb/bbb/image.cgi?を入れたいと思います。 ↓こんな感じかなーと思いつつあやっぱりできません。 $img_ref = preg_replace("/(https?):\/\/([\w;\/\?:\@&=\+\$,\-\.!~\*'\(\)%#]+)/", "<a href=\"$1://bbb/bbb/image.cgi?$2\" target=\"_blank\">", $img_ref); だれか知ってる方何卒宜しくお願いします。

    • ベストアンサー
    • 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
  • Mac OS10.4 テキストエディットでエンコード「Shift_jis」での保存ができません

    仕事でhtml書類にて提出する文書があります。 テキストエディットにてhtmlを打ち込みましたが、いざ保存しようとして、エンコーディングを指定しようとすると・・・ 【選択したテキストエンコーディング“日本語(Shift JIS)”で書類を保存できませんでした。別のエンコーディングを選んでください。】 というメッセージが表示され、保存できません。 ちなみに、Unicode(UTF-16)、Unicode(UTF-8)、中国語(GB18030)しか選択できません。 Unicodeでは書類にエラーが出てしまうのでどうしてもシフトJIS形式のエンコードで保存する必要があります。 アプリケーションはテキストエディットではなくても、 「シフトJISにて保存」出来ればどのアプリケーションでも構いません。 分かる方どうかよろしくお願い致します。

    • ベストアンサー
    • Mac
  • 携帯からメールを送ると文字化け・・・

    PCからメールを送ると正常に表示されてるのに、携帯からだと内容が化けてしまうという現象になってしまいました・・・。 function sendmail($to,$from,$from_name,$title,$message){ /* JISコードへのエンコーディング */ $to = mb_convert_encoding($to, "JIS","EUCJP,UTF-8,SHIFT-JIS,ASCII,SJIS,ISO-2022-JP"); $from = mb_convert_encoding($from, "JIS","EUC-JP,UTF-8,SHIFT-JIS,ASCII,SJIS,ISO-2022-JP"); $title = mb_convert_encoding($title , "JIS","EUC-JP,UTF-8,SHIFT-JIS,ASCII,SJIS,ISO-2022-JP"); $message = mb_convert_encoding($message , "JIS","EUC-JP,UTF-8,SHIFT-JIS,ASCII,SJIS,ISO-2022-JP"); /* 改行コード変換(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); 分かる方いらっしゃいましたら、よろしくお願いしますm(__)m

    • ベストアンサー
    • PHP
  • エラーの意味がわかりません。

    現在phpを利用して携帯メールの内容をデコードしようと試みているのですが、 Gmailで送った内容は受信出来ても、携帯から送ったメールが 「=?SHIFT_JIS?B?◯◯=?= 」という文字になってしまい困っています。 受信媒体はGmail。送信媒体の携帯はソフトバンクのiphoneを使っています。 Shift_JISで出力しようとしているのですが、携帯からのメールを解析してくれません。 Shift_JISがプログラミングに不向きというのはわかっていますが、Shift_JISを利用したいんです。 携帯の文字コードはUTF-8だと思っているのですが、違うのでしょうか。 「=?SHIFT_JIS?B?◯◯=?= 」というエラーの意味を調べても全然出て来ず、意味がわからないので解析しない原因が突き止められません。 どなたかこのエラーの意味をご存知でしたら、教えて頂けると嬉しいです、 よろしくお願いいたします。

  • 1バイトのみのテキストのエンコーディング

    「Googleサイトマップ」用にテキスト形式のサイトマップファイルをアップロードしたところ、文頭に何か2バイト付加されてエラーになりました。 MAC OS9でJedit3からUTF-8/LFで保存したもので、サイトのURLを羅列しただけの内容です。 WINDOWSのK2EditorでUTF-8Nにして再送信しましたが、まだGoogleが確認していません。 そこで大変基本的(初歩的)な疑問ですが、1バイトASCII文字のみのテキストファイルをUTF-8エンコーディングで保存して再度開くとエンコーディングはどうなるのでしょうか? 改行コード(CR/LF)はShift-JISと同じ(0D/0A)なのでしょうか。そうだとすると保存するときの「漢字コード」がShift-JISでもUTF-8でも2バイト文字を含まない場合は結果(ファイルの内容)は同じになるのでしょうか? テキストファイルの内容(漢字コードや制御文字)を見るツールなんてものがあるのでしょうか。

専門家に質問してみよう