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

Masaki Kagaya masakielastic @ gmail.com
2015年 2月 20日 (金) 20:51:15 JST


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

https://github.com/php/php-src/pull/1100

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

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

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

コードポイントから UTF-8 の文字を生成する
http://qiita.com/masakielastic/items/68f81e1b7d153ee5cc81
UTF-8 の文字からコードポイントを求める
http://qiita.com/masakielastic/items/5696cf90738c1438f10d

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

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))

-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.php.gr.jp/pipermail/php-dev/attachments/20150220/653944ff/attachment.html>


PHP-dev メーリングリストの案内