【PHP】webサイトが文字化けした時に試した事
とある名前も聞いたことの無いレンタルサーバーを使ってるお客さんでphp5.6からphp7.2にあげたら文字化けした時の備忘録
以前も似たような現象があった
過去にはそもそもファイル自体がshift-jisで作成されてて<head>
タグ内で文字コードの宣言自体が意味をなさなかったのでphpのバージョンを5.5にして使い続けたり(php5.6以上だとshift-jisと相性が悪いみたいで文字化けする)
utf-8で保存し直して再度あげたら直ったことあったけど今回はそもそもサーバーに問題があるっぽかった
実際に試した事
header()関数で文字コード指定
phpファイルの一番上に記述
<?php
header("Content-Type: text/html; charset=UTF-8");
?>
php.iniで文字コードを指定
php.ini作って以下のコードを書いてアップロード
cgi.force_redirect = 0
Default_charset = "utf-8"
サーバーによって違うのか、php.iniを設置した段階で
「On → Off」「EUC-JP → no value」に変更された(初期化?)
.htaccessで文字コードの変更
php_flag mbstring.encoding_translation off
php_value default_charset "UTF-8"
php_value, php_flagが使えないサーバーなんかだと「Internal Server Error(500)」が起きるから起きたらphp.iniかheader関数使った方がいい(管理画面で設定できればそれに越したことないけど)
まとめ
サーバーによってもサーバー管理画面から変更をかけられたり、php.iniで変更かけられたり.htaccessでもできたりするみたいだから一通り試してみてそれでも文字化けするならファイルの文字コードが原因だと思うその辺はサーバー会社によって異なるみたいだから調べる必要性がありそう
せっかく調べたのに…
参考1
▼PHPプログラムで日本語が文字化けした時の対処法
https://sole-color-blog.com/blog/841/
参考2
▼【ワテの失敗】PHPの文字化けの原因が分からない【解決‼】
https://www.wareko.jp/blog/php-garbled-characters-has-been-solved
メモ:文字コード調べる
参考にしたサイトで使われてて便利そうだったのでメモ
文字コードに何を使われているかどうか判別に使えそう
<?php
$a ="何故か、日本語が化ける。";
$a1 = mb_convert_encoding($a, "EUC-JP");
$a2 = mb_convert_encoding($a, "SJIS");
$a3 = mb_convert_encoding($a, "UTF-8");
$a4 = mb_convert_encoding($a, "UTF-16");
$a5 = mb_convert_encoding($a, "UTF-16BE");
$a6 = mb_convert_encoding($a, "UTF-16LE");
$a7 = mb_convert_encoding($a, "UTF-32");
$a8 = mb_convert_encoding($a, "ASCII");
$a9 = mb_convert_encoding($a, "CP932");
$a10 = mb_convert_encoding($a, "JIS");
echo "$a". $a ."<br>";
echo "$a1". $a1 ."<br>";
echo "$a2". $a2 ."<br>";
echo "$a3". $a3 ."<br>";
echo "$a4". $a4 ."<br>";
echo "$a5". $a5 ."<br>";
echo "$a6". $a6 ."<br>";
echo "$a7". $a7 ."<br>";
echo "$a8". $a8 ."<br>";
echo "$a9". $a9 ."<br>";
echo "$a10". $a10 ."<br>";
?>
「cgi.force_redirect = 0」をphp.iniで指定したら直った、注意