※ ChatGPTを利用し、要約された質問です(原文:正規表現で全角文字を全て削除したい)
正規表現で全角文字を削除する方法とは?
このQ&Aのポイント
正規表現を使ってアスキーコード文字以外の全角文字を削除する方法について教えてください。
mb_ereg_replaceを使用して英小文字以外の全角文字を削除しようとしたが、ユーロ記号が削除できないという問題が発生しました。
ブラウザから送られてくるデータに含まれるユーロ記号を削除する方法や、アスキーコード以外の全角文字を削除する方法について詳しく教えてください。
正規表現を使ってアスキーコード文字以外の全角文字を全て削除しようとしたのですが、ユーロ記号 € が削除できませんでした。
以下は英小文字以外全て削除しようとしたものです。
英小文字以外や全角文字は削除できているようですが、ユーロ記号が削除されません。
mb_ereg_replace ('[^a-z]', "", $str);
error_logを使って確認してみるとそもそもブラウザから送られてきたきた時点で € となっています。(ユーロ記号そのものがこの場に表示されてしまうので全角で明記していますが実際は7文字全て半角です。) これが正しい挙動なのかどうかも判断がつきかねています。(コード番号そのものはユーロ記号のようですが)
error_log($_POST['moji'], 0);
以下のようにアスキーコード以外全て削除という指定も削除されませんでした。
€ をアスキーコード7文字として一つ一つ処理しているようです。
mb_ereg_replace ('[^\x00-\x7f]', "", $str);
ちなみにこの € の入った $str をHTMLを使いブラウザに出力してやるとちゃんとユーロ記号が表示されます。
<pre>{$str}</pre>
mb_internal_encodingやmb_regex_encodingの設定などいろいろ試してみたのですがうまくいきませんでした。
この文章を書いていて今思ったのですが、ひょっとしてまず &#と; で挟まれたものを削除するというのがこの問題の一般的な解決方法なのでしょうか。そうすればユーロ記号 &#8364; も削除できますし。もしそうならその辺の事情も解説あるいはURL明記していただけると助かります。
(でもこれ、アスキーコードは残したい場合にたまたま &#8364; というユーロ記号を意図しないただの半角7文字の文が入力されてきてしまっても削除されるということになっちゃいますね。これはやっぱりしょうがないのですかね。)
よろしくお願いします。
お礼
回答ありがとうございます。 とても参考になりました。