php4の文字列表示で困っています。


機能ミソ\500という文字を、SJISで
そのまま画面に表示しようとしています。
しかし、

---
$str = "機能ミソ\500";
echo $str;

$str = '機能ミソ\500';
echo $str;

$str = "機能ミソ\500";
echo addslashes($str);
---

以上のコードを実行した結果は

機能ミソ500
機能ミソ500
機能\ミソ\500

となります。

実行環境は
php4.3.9 , apache 2.0.52
Redhat ES 4です。

宜しくお願いします

回答の条件
  • 1人2回まで
  • 登録:2006/03/29 21:02:10
  • 終了:2006/03/30 09:42:08

回答(6件)

id:tomo_k No.1

tomo_k回答回数426ベストアンサー獲得回数262006/03/29 21:19:30

ポイント14pt

http://www.scollabo.com/banban/php/php_07.html

$str = '機能ミソ\\500';

echo $str;

\はエスケープ文字列なので\そのものを出力したいときは、\\とする必要があると思います。

id:mgaki

$strの中の文字列を変更せずに表示する

方法を探しています。

プログラムで出力したいので、

出来れば関数やコードを紹介していただけると嬉しかったのですが…

2006/03/29 21:22:17
id:tadashi0805 No.2

tadashi0805回答回数287ベストアンサー獲得回数292006/03/29 22:40:14

ポイント28pt

まず、phpの処理自体を、SJISでなくEUCとかUTF-8とか別のコードで記述してください。

SJISで記述すると、¥マーク(アスキーコード0x5c)とSJISの漢字コードの2バイト目が0x5cになっている文字との区別が付かないので、様々な思ってもいないことが起こります。

で、表示する際に、SJISに変換して出力してください。

これで、プログラム中に書いた文字列通りに出力されます。

$str = '機能ミソ¥500';

echo mb_convert_encoding($str, 'SJIS', 'EUC-JP');

id:tomo_k No.3

tomo_k回答回数426ベストアンサー獲得回数262006/03/29 21:29:16

ポイント13pt

それでしたら、置換をしてあげるとよろしいかと思います。

$str = '機能ミソ\500';

str_replace("\","\\",$str);

echo $str;

みたいな感じでどうでしょうか?

文字列に対して置換をしてあげるというのならば機械的にできるので応用が利くと思いますが。

id:wate_wate No.4

ワテ回答回数45ベストアンサー獲得回数32006/03/30 02:16:13

ポイント28pt

多分、今回の現象は

PHPの内部エンコーディングと変数内のエンコーディングが違うために

起こっている可能性が高いです。

PHPとは違いますが

CGI(Perl)をShift-JISで記述した場合に

「ソ」や「表」など2byte目が 0x5C の文字を含んでいる場合は

文字化けします。

これと同様の問題ではないかと思われます。

PHPコード上の問題というよりも

文字コードの問題だと思われますので

PHP自体のエンコードをEUCで保存すれば早いかと思われます。

Shift-JIS限定ということであれば

PHPコード上で変更するよりも

mbstring.encoding_translation

mbstring.internal_encoding

ini_set関数を使用してPHP設定を変更した方が

早いかと思われます。

id:chankaz No.5

chankaz回答回数53ベストアンサー獲得回数32006/03/30 04:26:30

ポイント14pt

「金額の前に¥マークをつけたい」ということでしたら、以下のコードでいかがでしょうか。

(金額部分が半角数字という前提で書いてます)

$str = '機能ミソ\500';

echo preg_replace('/(\d+)$/', '\\\\\\1', $str);

ただし、文字列中に金額以外の数字がある場合にも反応してしまうので、もしあるなら、別に対処が必要になってきます。

id:chankaz No.6

chankaz回答回数53ベストアンサー獲得回数32006/03/30 04:35:47

ポイント13pt

> $str = '機能ミソ\500';

> echo preg_replace('/(\d+)$/', '\\\\\\1', $str);

すみません。説明を間違えました。

上記コードは文字列中に他の半角数字が出現しても問題ありません。

正しくは

「金額部分が末尾ではない」場合には反応しません。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません