[PHP-dev 1553] mb_chr と mb_ord 導入の提案

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[PHP-dev 1553] mb_chr と mb_ord 導入の提案

Masaki Kagaya
加賀谷です。コードポイントから文字を返す mb_chr および文字からコードポイントを返す mb_ord の導入を提案します。


導入を提案する理由は次のとおりです。

1. テストケースの作成やコードポイントをもとに文字列を置き換える関数の定義を円滑にするため
2. コードポイントをもとにした文字の学習支援のため
3. mb_encode_numericentity や mb_decode_numericentity はわかりにくく、あまり使われてない。
4. PHP 7.0 で Unicode エスケープシーケンスの構文や intl の IntlChar::chr、IntlChar::ord が導入されるが、UTF-8 に限定される。

既存の関数の調査は次の URL で公開しています。

コードポイントから UTF-8 の文字を生成する
UTF-8 の文字からコードポイントを求める

次の件について、みなさんのご意見をうかがたいたいです。

1. 変換を禁止するエンコーディングのリストの妥当性
2. 無効なコードポイントと不正なバイト列に対して代替文字もしくはそのコードポイントを返す

1. に関して、通信用途がメインで、部分文字列の取り出しや連結の用途がほとんど見られない ISO-2022-JP 系のエンコーディングや base64 などをリストに記載しています。

2. に関して、処理を止めるかどうかをプログラマにゆだねるためです。

同じようなふるまいの先行例として、mb_convert_encoding、htmlspecialchars の ENT_SUBSTITUTE、ICU の U8_NEXT_OR_FFFD (utf8.h)、golang の rune をあげることができます。golang の場合、次のコードで確認できます。

c := rune(-1)
println(string(c))

_______________________________________________
PHP-dev mailing list
[hidden email]
http://ml.php.gr.jp/mailman/listinfo/php-dev