2015年に某レンタルサーバー会社のWindows VPSサーバーを借りて、自力でセットアップを行った。
主な作業内容な以下の通り。
- Windows Server 2012R2のインストール
- ドメインの取得、DNSの設定
- IISのインストール
- PHPのインストール
- MySQLのインストール
- WordPressのインストール
- SQL Server Express 2014のインストール
などだ。
2~3週間、必死で試行錯誤してどうにか自力で完了した。
それで無事にWordPressも使えるようになったので、ワテもブロガーデビューしたのだが、何かとトラブルが多い。
今回のトラブルは、WordPressの投稿記事で、タイトルが日本語の場合に他のPCでブラウザーを開いてワテのサイトを開くと記事が表示されないのだ。
具体的には「ページが見つかりません」と出る。
英語タイトルなら問題無く見れるのだが。
当記事は、その奇妙な症状を無事に解決する事が出来たので、その備忘録としてまとめてみた。
では本題に入ろう。
日本語タイトルの投稿記事が他のPCから見えない症状
その症状の詳細は以下の通り。
- WordPressにログインしている管理者なら問題なく表示出来る。
- WordPressにログインしていない一般ユーザーが日本語タイトル記事を見るとページが見つからない。
- エラーメッセージなどは出ず、「ページが見つかりません」と表示される。
- 英語のみのタイトルならば、全く問題なく表示できる。
- タイトルが日本語の場合でも左側サイドバーには投稿一覧が出るし、そのタイトルが英語でも日本語でも正しくリストされる。
- その投稿一覧の日本語タイトル記事をクリックすると「ページが見つかりません」と出る。
と言う症状だ。
つまり、WordPress自体が全く動いていないと言う訳ではなくて、ある程度は正しく動いているようである。
でも何らかの理由で日本語タイトルの記事が存在しない事になっているようなのだ。
あかんがな。
何でかな?
いろいろググったりしていて、ようやく原因が判明して無事解決した。
日本語タイトル記事ページが見付からない原因判明
PHPの日本語関連の設定が関係していたようだ。
確かに、PHPはインストールしたのだが、言語設定みないなのは何もしていない。
つまりデフォルト設定のまま使っている。
その場合には、どんな文字コードが有効になっているのかも未確認だった。
PHPの日本語関連の設定
さっそくPHPの設定ファイルphp.iniを編集して、日本語UTF-8の設定にした。
日本語文字コードはJIS、SJIS、EUC、UTF-8その他多数の文字コードがあるが、ネット検索してみるとWordPressの文字コードはUTF-8との事だったので、UTF-8にしてみた。
以下、その設定方法。
php.iniをメモ帳などで開き、以下の数カ所の行頭のコメント記号;を取って有効化する。
かつ、必要に応じて新しいパラメータを書き込む。
extension_dir = "ext" ← コメント;を取る extension=php_mbstring.dll ← コメント;を取る ; language for internal character representation. ; http://php.net/mbstring.language mbstring.language = Japanese ← コメント;を取る ; internal/script encoding. ; Some encoding cannot work as internal encoding. ; (e.g. SJIS, BIG5, ISO-2022-*) ; http://php.net/mbstring.internal-encoding mbstring.internal_encoding = UTF-8 ← コメント;を取って、UTF-8にした ; http input encoding. ; http://php.net/mbstring.http-input mbstring.http_input = auto ← コメント;を取る ; http output encoding. mb_output_handler must be ; registered as output buffer to function ; http://php.net/mbstring.http-output mbstring.http_output = UTF-8 ← コメント;を取って、UTF-8にした ; enable automatic encoding translation according to ; mbstring.internal_encoding setting. Input chars are : ; enable automatic encoding translation according to ; mbstring.internal_encoding setting. Input chars are ; converted to internal encoding by setting this to On. ; Note: Do _not_ use automatic encoding translation for ; portable libs/applications. ; http://php.net/mbstring.encoding-translation mbstring.encoding_translation = On ← コメント;を取ってOnにした ; automatic encoding detection order. ; auto means ; http://php.net/mbstring.detect-order mbstring.detect_order = auto ← コメント;を取る
この設定をしたら、WordPressで日本語タイトルの記事も問題なく無事に表示されるようになった。
まとめ
当記事では、ワテが自力でインストールしたWordPressにおいて、日本語タイトルの投稿記事が管理者である自分のパソコンからは問題無く表示出来るが、もう一台所有している別のパソコンから一般ユーザーとしてその記事を開くと、「ページが見つかりません。」と言うエラーの解決方法を紹介した。
原因はPHPの日本語文字コードがUTF-8になっていなかった事だ。
多分、ANSIなどの英語文字コードの状態だったのかと思う。
それをUTF-8に変更したら問題は解決した。
しかしまあ、文字コードの問題はコンピュータの永遠のテーマだ。
世の中には無数と言って良いくらい沢山の文字コードがある。
UNICODEと文字化け
それを統一すると言う思想でUnicodeが制定されたと思うのだが、そのUnicodeですら、以下のような方言みたいなのに分裂している。
- UTF-8
- UTF-16
- UTF-16 BE(ビッグエンディアン)
- UTF-16 LE(リトルエンディアン)
- UTF-32
ワテの場合、文字コードの専門家ではないので詳しい事は良く知らないのだが、結局は、文字を何バイトで表現するかと言う問題だろう。
英数字だけなら8ビット(=1バイト)で足りる。
漢字や平仮名、カタカナなどを表現するには1バイトでは足りないから2バイト文字コードを制定した。
でも2バイトだと65,536種類の文字しか表現できない。
当用漢字くらいならそれで足りるだろうが、漢字は何十万個もあるから2バイトでは当然足りない。
3バイトにすれば16,777,216文字(1677万文字)。
4バイトにすれば4,294,967,296文字つまり、43億文字まで表現できる。
まあ、世の中にコンピュータが登場した1940年代(かな?)の頃から4バイト文字コードを採用していたら、今のような文字コード乱立による混乱は起こらなかったかも知れない。
異なる文字コードが原因で、メールやWEBサイトの文字化け、データベースなどのデータの文字化け、など、世の中の至る所で文字化けの問題が今でも起こっている。
その対策に掛る人件費は馬鹿に成らないだろう。
文字化けによる損失は膨大!
ワテの勝手な推測では、世の中の文字コードが一種類しかなくて、メール交換、WEBサイト、データベースのデータなどで文字化けが滅多に起きないような世の中だったら、人類がコンピュータに投資している費用のうちの30~40%くらいは節約出来ると思う。
つまりまあ、文字化けは諸悪の根源なのだ。
と言う事で、全宇宙統一文字コードを制定すべきだと思う。
4バイトなんてけち臭い事言わずに、8バイト固定長とか16バイト固定長の文字コードを制定すればいいのに。
それくらいのビット数があれば、全宇宙人の全種類の文字ですら表現出来るくらいの余裕があるだろう。
ワテ推薦の本
どちらも 超高速WordPressサイト構築 で定評のあるプライム・ストラテジー株式会社の本だ。
漢和辞典と言えばこの全集だ。よくこんなものが作れると思う。
白川静先生も有名だ。
コメント