[PHP-users 4690] Re: sjis で  echo ”能” エラー

Yoshikuni php-users@php.gr.jp
Mon, 14 Jan 2002 00:06:40 -0800


皆さんのご指摘でもうなぞは解けてると思いますが、
前に僕もこれで悩んだので一応返信しておきます。
「能」とか「ソ」の文字(2バイト目が「\」のコード)は2バイト目の影響で、
その直後のコードがエスケープされ、もし次ぎのコードが2バイトコードの場合、
全部が1バイト前にシフト表示されるため、マルチバイト対応されていない
phpの環境ではSJISは文字化けが発生します。これはSJISコードの場合、
2バイト目が¥のコードと重なってしまう為です。このへんはバイトコードを
1つ1つ紙に書くとエスケープされてるのが分かると思うので、一度試しては
どうでしょうか?見事に1つずれてます。

で、肝心の文字化けですが、(多分この質問を出してる時点でphpはマルチバイト
対応
じゃないと思いますが)もしサーバーのPHPがマルチバイトに対応していなければ
SJISでコードを書くと、必ず後で悩む事になると思います。特にUNIXがサー
バのOS
ならEUC-JPを利用して書いたほうが良いのでは・・・。
普通のHTMLを表示するだけならOKですが、質問の様にコード内の「"」の
前に「ソ」の文字が来りした場合にほとんどの文字列関数でエラーになります。
この辺のエラーはEUCを使っていればEUCのテーブル構造上発生することは
ないと思います。ただ、もし何らかの理由でSJIS出力する必要がある場合は
出力前にSJISに変換するしかないですが、これはnkfで対応するか、マルチバイ
ト
対応のPHPをインストールするか、自分でスクリプトを制作するしか方法がないん
じゃ
ないでしょうか?
もし海外サーバーを利用していて管理者がマルチバイト対応にしてくれない場合は連
絡下さい。
僕もmb非対応環境でEUC⇔SJISの関数を作ってEUCコードをSJIS表示(i-mode
用)
対応してます。一応問題なく動いてます。









----- Original Message -----
From: <qtflash@mail.goo.ne.jp>
To: <PHP-users@php.gr.jp>
Sent: Sunday, January 13, 2002 7:52 AM
Subject: [PHP-users 4681] sjis で  echo ”能” エラー


>
> いつも大変お世話になっています。
>
> sjisの書類 g.php
> 内容は
> <?
>
> echo "芸能";
>
> ?>
> ですが実行出来ません。
>
> Parse error: parse error in /home/・・・/g.php on line 5
>
> EUCでは問題ないのですが、sjisでの
> ”芸能”の書き出しが原因でエラーになる現象が起きてしまいました。
> 能だけでエラーになります。
> 能が文を壊して5行目でのエラーとなっている様ですが。
> 保存、FTPでの転送にミスが無いとして
> 解決策をご教授頂きたく宜しくお願いします。
>
> PHP Version 4.0.5
>
> 沼澤
> _______________________________________________
> PHP-users mailing list
> PHP-users@php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users