mbstring

マルチバイト正規表現関係のメモ

久しぶりに mbstring モジュール(特にマルチバイト正規表現)のソースコードを眺めていたのですが、いくつか面白い(知らなかった)挙動がありましたでメモしておきます。 確認した PHP のバージョンは 5.4.10 ですが、PHP 5.0 以降であれば、あまり変わりませ…

PHP 5.4.1 以降の mbstring の変更点

mb_ereg_replace_callback() の追加(PHP 5.4.1) PHP 5.4.1 で mb_ereg_replace_callback() が追加されました。正規表現にマッチした文字列に対してコールバック関数による置換ができます。以前から、mb_ereg_replace() のオプションに "e" を設定すると同様…

最近の mbstring 動向について(PHP 5.4〜)

PHP 5.4 に向けて、久しぶりに PHP の mbstring に対して機能追加と修正がありましたので、メモしておきます。 PHP 5.4.0 の正式リリースまでに「十分なテストが必要」とのことですので、気になる方はテストに参加した方が良いと思います。 変更点は以下の通…

PHP 5.2.12 の文字エンコーディング関連の修正点

PHP 5.2.12 がリリースされました。 PHP 5.2.12 Release Announcement PHP 5.2.12 ChangeLog Release Announcement にも載っていますが、以前、日記に書いた htmlspecialchars() が Shift_JIS の一部の文字を通してしまう問題は、セキュリティ問題として修正…

いわゆる半角カナや種依存文字などをメールで送信する方法

随分前から書こうと思っていて忘れていたのですが、役に立つ人がいるかもしれませんので、書いておきたいと思います。メールの送信エンコーディングに UTF-8 を使用すれば、機種依存文字という問題を気にする必要はほとんどありませんが、まだ一般的には、IS…

PHP 5.3.0 の mbstring で使用可能な文字コード名とエイリアス

PHP 5.3.0 で mb_encoding_aliases() が追加されました。 この関数は、第1引数に指定した文字コードが mbstring で使用できる場合、そのエイリアス名を配列で返します。引数の文字コードは大文字、小文字を区別しません。また、MIME名やエイリアス名も指定可…

mb_detect_encoding() は文字コードの妥当性検証として使用できるか(その3)

遅くなりましたが、以下の続きです。 mb_detect_encoding() は文字コード判定として使用できるか(その1)) mb_detect_encoding() は文字コード判定として使用できるか(その2)) 今回は ISO-2022-JP、ISO-2022-JP-MS、UTF-16、UTF-16BE、UTF-16LE について、mb_…

mb_check_encoding() の内部処理

参考までに、mb_check_encoding() が内部で何をしているかについて書いておきます。 mb_check_encoding() は mb_convert_encoding() で第2引数と第3引数に同じ文字コードを指定した場合と同じ処理い、元の文字列と、変換後の文字列が同じかどうかで TRUE/FAL…

mb_detect_encoding() は文字コードの妥当性検証として使用できるか(その2)

前回(mb_detect_encoding() は文字コード判定として使用できるか(その1))の続きです。 mb_check_encoding() と mb_detect_encoding() を正規表現として表わして比較してみました。各文字コードごとにまとめます。調査した PHP のバージョンは、5.2.9 で、前…

mb_detect_encoding() は文字コード判定として使用できるか(その1)

最近、mb_detect_encoding() について調べていたので、そのメモです。mb_detect_encoding() は文字コード検出を行う関数です(mb_detect_encoding() - PHP マニュアル)。 結論としては、以下の問題があるため、mb_detect_encoding() を文字コード判定には向い…

UTF-16(BOM 付き Little Endian) を mb_convert_encoding() で変換すると文字列が壊れる

前の項目からの続きです。 基本的に、PHP 5.2 1 以降(正確には 5.2.8 以降)では、mb_check_encoding() が false を返す場合、以下も false を返します。

mb_check_encoding() は UTF-16(BOM 付き Little Endian) を正しく検証できない

確認した PHP のバージョンは PHP 5.2.9 です。

php 5.2.9 で修正された mbstring 関係のバグをまとめました

PHP 5.2.9 で mbstring 関係についても多くのバグが修正されました。そのあたりについて、調べたことを PHP の mbstring に関するメモのバグ・セキュリティ問題にまとめました。何か間違いや気付いたことなどがあれば、コメントなどで教えてください。今回の…

PHP 4.4.9 で修正されていない mbstring 関連のバグをまとめてみました

リストに5項目(5.〜9.)を追加しました(2008.11.09)。2008.08.08 に PHP4 系の最終版である PHP 4.4.9 がリリースされました。今後は、PHP 4.x はリリースされることはなく、最新の PHP 5.x に移行することが推奨されています。 同じ日にあった PHP4 送別会に…

PHP の mbstring に関するメモを書いてみました

年末、年始に少し時間があったので、PHP の mbstring についていろいろとまとめてみました。 少しはまとまってきたので、公開します。 PHP の mbstring に関するメモ 何か間違いなどがあれば、メールやここのコメントで教えてください。