人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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です。

宜しくお願いします

●質問者: mgaki
●カテゴリ:インターネット ウェブ制作
✍キーワード:2.0 Apache ECHO Es RedHat
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● tomo_k
●14ポイント

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

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

echo $str;

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

◎質問者からの返答

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

方法を探しています。

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

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


2 ● tadashi0805
●28ポイント

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

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

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

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

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

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


3 ● tomo_k
●13ポイント

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

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

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

echo $str;

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

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


4 ● ワテ
●28ポイント

多分、今回の現象は

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

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

PHPとは違いますが

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

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

文字化けします。

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

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

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

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

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

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

mbstring.encoding_translation

mbstring.internal_encoding

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

早いかと思われます。


5 ● chankaz
●14ポイント

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

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

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

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

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


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ