- ベストアンサー
正規表現で全角文字を削除する方法とは?
- 正規表現を使ってアスキーコード文字以外の全角文字を削除する方法について教えてください。
- mb_ereg_replaceを使用して英小文字以外の全角文字を削除しようとしたが、ユーロ記号が削除できないという問題が発生しました。
- ブラウザから送られてくるデータに含まれるユーロ記号を削除する方法や、アスキーコード以外の全角文字を削除する方法について詳しく教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ユーロ記号は「全角文字」なのか?という疑問は置いといて... 以下、半角の&記号を全角の&で置き換えて書きます。 &#~;で表すのは数値文字参照と言います。~の部分は10進数とは限らず、16進数も使われます。このため€と€は同じ文字を表します。 また、ユーロ記号は文字実体参照を使って€という表し方もできます。 一方で、ASCIIの範囲にある文字が文字実体参照で表される場合があります(&→&、 >→>)。あまりやらないでしょうが、数値文字参照で表すこともできます(A→A)。 つまり、&と;に挟まれた内容を確認せずに削除してしまうと、数値文字参照や文字実体参照で表されたASCIIの範囲内の文字まで消えてしまうことになります。 ・入力に数値文字参照がある場合、&#と;の間の数値を確認し、その値が128以上だったら&#~;を削除する ・入力に文字実体参照がある場合、それが表す文字がASCIIの範囲内かどうかをチェックし、範囲外だったら&~;を削除する(ASCIIの範囲内の文字に対して定義されている文字実体参照は数が限られているので全数チェック可能) というような方針で対応すればいいのではないでしょうか。 > たまたま € というユーロ記号を意図しないただの半角7文字の文が入力されてきてしまっても ユーロ記号が€で表されるような入力であれば、「€」という文字列は「€」と表されると思う(未確認)のでその心配は無用でしょう。
その他の回答 (1)
- SAYKA
- ベストアンサー率34% (944/2776)
ユーロ記号はunicodeだとおもうけど phpとかのエンコーディングがunicodeになってないとか・・・
お礼
回答ありがとうございます。 参考にさせていただきます。
お礼
回答ありがとうございます。 とても参考になりました。