[PHP-users 1970] シングルバイト文字とマルチバイト文字の分割

Toshikazu Yoshikawa php-users@php.gr.jp
Tue, 11 Sep 2001 11:11:12 +0900


吉川@アンカットです。
いつもお世話になっております。
サブジェクトの件についてご意見を伺いたくポストしました。

●背景
現在、PHP-4.0.6+PDFlib 4.0.1を用いて、フォームに入力された文字列を
PDFファイルに埋め込むスクリプトを作成しています。
日本語も当然扱いますので、CJKフォントを利用しているのですが、
HeiseiKakuGo-W5でもHeiseiMin-W3でも、シングルバイト文字を表示すると、
マルチバイト文字と同じ幅をとってしまいます。
(文字自体は狭いのですが、文字の右側に余計なスペースが入ります)
PDFlibのマニュアルを読むと以下の文章がありました。とほほ。

Also, all characters in CJK fonts are considered to have the same width, including Latin
characters. The character width is equal to the font size. If you want Latin characters
which have a smaller width than the CJK characters you must switch to a Latin 8-bit font
such as Courier or Helvetica.

そこで、シングルバイト文字とマルチバイト文字の混在する文字列だった場合、
それぞれを分割してフォントを使い分ける必要に迫られているのですが、
入力された文字列を頭から1文字ずつ判定するという力技しか思いつきません。

●やりたいこと
例えば「日本語とEnglish混じりのTextです」といった文字列が与えられた場合、

$array[0] = "日本語と"
$array[1] = "English"
$array[2] = "混じりの"
$array[3] = "Text"
$array[4] = "です"

のように、分離できればと思うのですが、mbregexモジュール等を利用して
スマートに行なう方法をどなたかご存知ないでしょうか?
やはり一文字ずつシングルバイト文字かマルチバイト文字か判定して
地道に配列を埋めていくしかないのだろうか・・・

内部エンコーディングはEUCで、いわゆる半角カナは使用しません。
よろしくお願いいたします。

---
unCut  Toshikazu Yoshikawa
mailto:toshi@uncut00.com