[PHP-users 16528]Re: 「名」「前」「名前」が「?」になる

Yamamoto yamamoto @ joeswebhosting.net
2003年 7月 7日 (月) 05:41:13 JST


山本です。

以下のスクリプトを書いてテストしましたが問題ありませんでした。

-------------------
下記内容をEUC-JPで保存して、php -q mbconvtest.php | nkf -e と実行

<?
mb_internal_encoding("EUC-JP");
print mb_convert_encoding("名", "SJIS");
?>

結果:「名」が得られました。



下記内容をShift_JISで保存して、php -q mbconvtest_sjis.php と実行

<?
mb_internal_encoding("SJIS");
print mb_convert_encoding("名", "EUC-JP");
?>

結果:「名」が得られました。


Shift_JISではなくて、SJISとする必要があると思います。

ただし、Shift_JISはphpでは使用すべきではないとされているようです。

マニュアルから抜粋:

PHPは、基本的にISO-8859-1用に設計されているため、いくつかのマルチ バイト
文字エンコーディングは、PHPで正常に動作しません。このため、 
mbstring.internal_encoding にPHPで動作する文字 エンコーディングを設定す
ることが必要です。 

PHP4の文字エンコーディングに関する規約 

・バイト毎のエンコーディングである。 
・シングルバイト文字は、ASCII互換の 00h-7fhの範囲にある。 
・マルチバイト文字は、00h-7fh以外を使用する。 

PHPの内部エンコーディングとして使用可能な文字エンコーディングと 使用でき
ない文字エンコーディングの例を以下に示します。 

PHPで動作する文字エンコーディング: 
ISO-8859-*, EUC-JP, UTF-8

PHPで動作しない文字エンコーディング:
JIS, SJIS


PHPの内部エンコーディングとして使用できない文字エンコーディングは、 
mbstringのHTTP入力/出力変換の機能/関数により変換 することが可能です。 

注意 SJIS は、読者がパーサ/コンパイラ、文字エンコーディングと文字エン コー
ディングの問題点について精通していない限り内部エンコーディン グとして使
用するべきではありません。

詳細は以下をご確認ください。

http://search.net-newbie.com/php/ref.mbstring.html

--------------------
Yamamoto

On Mon, 07 Jul 2003 05:23:19 +0900
Norio Taniguchi <white @ nightland.net> wrote:

> 
> 谷口と申します。
> 
> php-4.3.2
> の環境で、
> Shift_JIS<->EUC-JP
> EUC-JP<->Shift_JIS
> mb_convert_encoding にてコード変換を行うと、
> 「お名前」とかだと大丈夫なのですが、
> 「名」「名前」を単独で使うと「?」になり、
> 「前」を単独で使うと消えてしまします。
> これらの回避方法はございますでしょうか。
> よろしくお願いします。
> 
> -----
> Norio Taniguchi <white @ nightland.net>
> _______________________________________________
> PHP-users mailing list
> PHP-users @ php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users
> 




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