🔳問題
windows11のコマンドプロンプトで「php ファイル名.php」と入力してphpファイルを実行しました。
標準入力(キーボード)から受け取った文字列をそのまま標準出力(コマンドプロンプト)するプログラムで、文字化けしてしまいました。実行結果を載せていますが、「あいうえお」をプログラムに渡した結果です。
🔳ソースコード
<?php echo "入力してください\n"; $word = fgets(STDIN); echo($word); ?>
🔳実行結果
入力してください
あいうえお
�����
🔳質問したいこと
ソースコードはvscodeで作成したものです。文字コードはutf8です。ソースコードの文字コードは変更せずに、文字化けを防ぐ方法が聞きたいです。
windowsのコマンドプロンプトでutf8のphpファイルを文字化けせずに実行するのは不可能でしょうか。
🔳試したこと
・php.iniの設定確認。
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = Off
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.detect_order = auto
となっています。
・コマンドプロンプトの文字コード変更。
chcp 65001 ,chcp 932
どちらの場合でも文字化けしました。
どちらもフォントはMSゴシックです。
・コード内でmb_string_encoding()関数の使用
mb_string_encoding($word,"utf-8","sjis");
mb_stiring_encoding($word,"utf-8","sjis-win");
echo($word)の前に挿入して、それぞれ試しましたが文字化けは治りませんでした。
sjisでは相変わらず「�����」と表示され、sjis-winでは何も表示されず空白でした。
・powershell
powershellでも試してみました。
chcp 65001 MSゴシック設定では、mb_conver_encodingの使用の有無に関わらず、
「�����」と表示されてしまいます。
chcp 932 MSゴシック設定では、mb_convert_encodingにsjisを適用すると、
「@@@@@」と表示されました。sjis-winを適用した場合は「�����」となりました。
関数を使用しない場合も「�����」となってしまいました。
・vscodeのターミナルでの実行
文字化けしました。
mb_convert_encoding関数なしの場合、「`````」と文字化け。
mb_convert_encoding関数(sjis-win)使用の場合、「�����」と文字化け。
mb_convert_encdoing関数(sjis)使用の場合、「�����」と文字化け。
vscodeのターミナルを使うのは初めてなので、設定次第でうまくいくかもしれません。
もう少し調べてみます。
・ターミナルからコマンドプロンプト、powershellの起動
ターミナルからコマンドプロンプトまたはpowershellを起動して実行すると
ネットに書かれていたので、実行したところ文字化けしました。
・windows11のutf8設定
windows11では文字コードをutf8に設定できると調べて分かったので、
やってみましたが、文字化けしました。
・phpの再インストール
xamppでインストールしたphpを使用していたが、CLI版のphpをインストールし直してみた。文字化けしました。
・作成したphpファイルの文字コードを確認
vscodeの設定を見直しました。また、typeコマンドでphpファイルをコマンドプロンプト上で表示して、65001では正常に表示され、932では文字化けを起こしました。
以上からphpファイルはutf8で作成されていると判断しました。
疲れたので諦めます。頭のいい誰かうまく出来たら教えてください。