悩んだこと
ユーザーの入力値とテーブルに格納されている文字列とを比較して、検索を行いたかった。 絵文字はテーブルに数値文字参照(10進)で格納されているが、入力値の絵文字部分だけ数値文字参照(10進)にする方法が分からなかった。
やりたいこと・条件
やったこと
入力値をUTF-8で受け取り、EUC-JPに変換。その際扱えない文字をHTMLエンティティに置きかえる。
<?php $substrchar = mb_substitute_character(); mb_substitute_character('entity'); $post_text = mb_convert_encoding($post_text, "cp51932, "UTF-8"); mb_substitute_character($substrchar);
この時$textを出力すると、絵文字は16進の数値文字参照に置き換わっていた。 要件は10進数なので、正規表現で更に変換。
<?php $ptn = "/(&#x[0-9a-zA-Z]+;)/"; $post_text = preg_replace_callback($ptn, function ($matches) { $hex_entity = $matches[0]; return "&#".hexdec(substr($hex_entity, 3, -1)).";"; }, $post_text);
もっと良い方法もあるのかもしれない