dポイントプレゼントキャンペーン実施中!

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を使わない方が良いのか使い方が悪いのかも解りませんがアドバイスお願いします。

A 回答 (5件)

正規表現用の文字コードは指定されていますか?


これをEUC-JPに設定しておかないと正しく動作しないでしょう。
php.iniなどでmbstring.internal_encodingの値をEUC-JPにするか、mb_regex_encoding関数でEUC-JPを指定してみてください。
http://jp2.php.net/manual/ja/function.mb-regex-e …
http://jp2.php.net/manual/ja/function.mb-ereg-re …
    • good
    • 0
この回答へのお礼

下記でうまくいきました。
助かりました。

mb_regex_encoding( "EUC-JP" );
$html .= mb_ereg_replace('△', '', 'あああ△あああ');// 文字化け

お礼日時:2009/08/04 23:17

No.4です。

No.3のSortaNerdさんと同じになってしまいました。
それで、
$html = str_replace("(?<!\xA4)△", '', 'あああ△あああ'); なんていう場合は実際にはあまり出現しないと思いますが、preg_replaceを使えばOKだと思いますよ。
$html = preg_replace("/(?<!\xA4)△/","","あああ△あああ");
    • good
    • 0
この回答へのお礼

これも無事に動きました。有り難うございました。
実際には使用者が自由に追加できるようにしたいので、色々試してみたいと思います。
有り難うございました。

お礼日時:2009/08/04 23:21

$html = mb_ereg_replace('△', '', 'あああ△あああ'); でも


$html = str_replace('△', '', 'あああ△あああ'); でも
EUCでなければ(SJISかUTF8なら)うまくいきます。
というのは、
△ は \xA2\xA4
あ は \xA4\xA2
ですから、
\xA4【\xA2\xA4\xA2\xA4】\xA2【\xA2\xA4】\xA4【\xA2\xA4\xA2\xA4】\xA2 のように、
「あ」の2バイト目と、次の「あ」の1バイト目が \xA2\xA4 ですからマッチしてしまい、【 】のところが削除され、「あ」が2字残るわけです。
    • good
    • 0
この回答へのお礼

文字コードは思わぬ結果になるんですね。
勉強になりました。
有り難うございました。

お礼日時:2009/08/04 23:19

phpには詳しくないのですが、とりあえず文字コードの問題であるのは確かなようです。


EUC-JPでは
△ → A2 A4
あ → A4 A2
というコードですので、
あああ△あああ
→ A4 A2 A4 A2 A4 A2 A2 A4 A4 A2 A4 A2 A4 A2
→ A4 (A2 A4) (A2 A4) A2 (A2 A4) A4 (A2 A4) (A2 A4) A2
→ A4 A2 A4 A2
→ ああ
となっているようです。
状況から見るに、文字コードがShift_JISと判断されているように思います。
Shift_JISではA2は半角"「"、A4は半角"、"とそれぞれ1バイト文字に割り当てられていますので。
    • good
    • 0
この回答へのお礼

適当に打ち込んだテスト文字が偶然にこうなるとは…
勉強になりました。有り難うございました。

お礼日時:2009/08/04 23:15

ereg系の関数は使用しない方がよいでしょう。


これは単にstr_replaceでよいような気がします。

$html = str_replace('△', '', 'あああ△あああ');
print $html;

この回答への補足

早速の回答有り難うございました。
しかし、同じ結果になってしまいました。
設定の問題なんでしょうか…
ローカルでもサーバー(さくらインターネット)でも同じでした。

$html = str_replace('△', '', 'あああ△あああ');

・実際の結果 ああ

補足日時:2009/08/04 13:09
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!