>文字化けしてしまいます。
文字コードとしてjis,sjis,euc-jpなどが使われていると思います。これらのコードにはアクセント文字はありませんので文字化けは避けられません。
utf-8にすることでアクセント文字を識別できるのですが。
function ascii_replace($message) { $from = array("É","À","È","Ù","Â","Ê","Î","Ô","Û","Ë","Ï","Ü","Ç","Œ", "à","è","ù","â","ê","î","ô","û","ë","ï","ü","ç","œ"); $to = array("E","A","E","U","A","E","I","O","U","E","I","U","C","OE", "a","e","u","a","a","i","o","u","e","i","u","c","oe"); return str_replace($from, $to, $message); }
utf-8であればstr_replace()を使って$fromから$toのように置換できます。しかし$from,$toに記述しないアクセント文字は置換されませんし、utf-8であればアクセント文字は文字化けしませんので置換する必要が無いんですよねぇ。(^^)
function cut_accent_grave($message) { preg_match_all("/[A-Za-z0-9\s]+/", $message, $match); return implode($match[0]); }
逆に英数字以外削除してしまうのであれば簡単ですが、今度は漢字さえも削除してしまうのが難点です。どちらも使えませんねぇ。もっと対象を絞ってもらったらもう少しまともな対策がとれるかもしれません。
utf-8なら後々楽なんですけどね。
コメント(1件)
やはりこのように1文字ずつ置換するしかないようですね…。
ちなみに、JavaでUnicodeを扱う場合、Normalizer.decomposeで文字を分解して、InCombiningDiacriticalMarksを削除する、というやり方でアクセントがついた文字をアクセントなしの文字列に変換できるようです。
http://glaforge.free.fr/weblog/index.php?itemid=115