php_opendogs-0.2.0.tgz
文字列が UTF-8 として妥当なシーケンスか検証する関数 od_unistr_valid() と機能一覧を連想配列で返す関数 od_get_features() を追加したり、別件で作ってた Unicode 正規化機能をマージしたり。
正規化を有効にするには configure で --with-opendogs-unorm=/path/to/icu-config です。
なにげに Unicode 正規化は PHP6 の Unicode 文字列型にも使えるようにしていて、↓の結果が
#!/opt/php/6.0/bin/php <?php extension_loaded('opendogs') || dl('opendogs.so') || exit(1); // INI entries: // unicode.semantics = On // unicode.*_encoding = UTF-8 $s1 = od_unichr(0x2460); $u1 = chr(0x2460); $s2 = (binary)"test"; $u2 = (unicode)$s2; var_dump($s1, od_unorm_nfkc($s1)); var_dump($u1, od_unorm_nfkc($u1)); var_dump($s2, od_unorm_nfkc($s2)); var_dump($u2, od_unorm_nfkc($u2));
こんな風になります。
string(3) "(丸数字の1)" string(1) "1" unicode(1) "(丸数字の1)" unicode(1) "1" string(12) "test" string(4) "test" unicode(4) "test" unicode(4) "test"
同じ ICU を使った機能なので相性も申し分ありません。
しかし PHP6 がリリースされたとして、unicode.semantics = On で使い物になるまで、また、それを活かしたライブラリが出そろうまで、すごい時間がかかるか、下手をすると他の言語に現在のポジションを取って代わられるような気がしてなりません。
別にかまわないっちゃーかまわないわけですが。