日本語は2バイト文字?3バイト文字?
2017/03/07
文字コードは UTF-8が主流に
前回の日記の最後に少し文字のバイト数の件を書きましたので、ついでに今日は文字のバイト数のお話です。
最近の Webサイト製作、PHPのプログラム開発は Unicodeでの開発がほとんどで、以前ほど文字コードによる文字化けに悩まされることは減って来ているのではないかと思います。
また、かつて、半角カタカナは非常に厄介な問題でもあったわけですが、こちらも技術の進歩でかなりの部分問題なく対応されて来ています。
日本語は 2バイトではない
そんなわけで、最近はあまり文字コードのことを気にしなくなりつつあるわけですが、今日の日記の主題は「日本語の 1文字は果たして何バイトなのだろうか?」ということです。
SHIFT-JIS、EUCを主に使っていた頃は、全角文字は 2バイト文字とも言われるように、1文字は 2バイトだったわけです。
ですが、Unicodeなるとやや事情が異なってきてしまいます。
Unicodeでもこれまでと同様 2バイトのものもありますが、文字によっては 3バイト、4バイトのものが存在するわけです。
詳しくは、下記のサイトが参考になりました。
PHPのstrlen関数で全角文字が3バイトになる件
http://hamamuratakuo.blog61.fc2.com/blog-entry-421.html
そして、「文字ごとにバイト数が違う場合、どのような影響があるのか?」ということについては、フォームなどから文字を入力してもらう際に行う文字数チェックで、意図しない結果になる可能性が出てくる、というわけです。
PHPで文字数をチェックする際には「strlen」で文字のバイト数を取得して計算するわけですが、文字によって返ってくるバイト数が違ってくるために、一概に「入力は何文字まで」と言う制限が出来なくなってしまうわけです。
DBに日本語を保存する場合、char型などで桁数を指定しようとした場合にも不具合が起こる可能性があるわけです。
詳しい説明などは書きのサイトなどが参考になるかと思いますのでご覧いただければ、今後の参考になるかと思います。
日本語文字列のバイト数取得にstrlenだけではダメな理由-PHP
http://www.cpa-lab.com/tech/0144
Script雑感
http://zombiebook.seesaa.net/article/33192046.html
2014.06.26 追記
日本語のバイト数については、MySQLなどのデータベースを構築する際にも関わってくる問題です。
MySQLでの日本語のバイト数の扱いについては「MySQLのInnoDBでUniqueキーは最大767バイト」に記事を書いていますので、参照してください。
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
XSERVERにCakePHP3をインストール。コマンドラインのPHPのバージョンを変更する方法で解決
XSERVERにCakePHP3をインストールするときに問題となるのはサーバーパネルとSSH接続の時とで認識されるPHPのバージョンの違いがあるため。その解消方法を解説する。
-
-
X Serverへの引越しの注意点まとめ。ロリポップとの違いと対処方法 6事例
ロリポップからX Serverに引越し。ロリポップとX Serverの違いに注目することでX Serverの設定方法を明確にします。またX Serverならではの設定ポイントなども解説。
-
-
直リンク禁止の.htaccessを超分かりやすく解説。日本語じゃなくてPHPで説明
直リンクを禁止する.htaccessの記述内容を日本語ではなくPHPで解説!私自身もこの方法ですっかり理解できました。.htaccessって簡単!って思えますよ。
-
-
SyntaxHighlighterを導入してソースコードを見やすくしてみました
PHP、HTMLなどのソースコードをブログで紹介するとき、SyntaxHighlighterを利用することで見やすく提供することが出来ます。
-
-
FTPでダウンロード時にファイルが重複するため上書きしますか?と表示される問題
FTPでファイルをダウンロードする際に「ファイルが重複しています。上書きしますか?」というメッセージが出る場合がありますが、これの原因と対策、解決策の記事です。
-
-
CentOS環境に ntpdをインストールして自動的に時刻を取得して合わせる設定にする
VirtualBoxに構築した CentOSの環境の時計がずれているとき、ntpdをインストールし、時計を合わせる方法を解説。NTPサーバを指定する方法や ntpdを自動起動する設定も解説。
-
-
mod_pagespeedカスタマイズで高速化を詳細解説・Google謹製
mod_pagespeedをデフォルトのまま使っていませんか?mod_pagespeedはデフォルトのままでも速い!でも仕組みを理解し設定し直せばより速くなる!
-
-
Gitで基本的なデプロイ(push、pullで本番公開)環境を作る手順解説
開発進行中の環境、公開中の環境にGitを導入する。その基本的な手続きを解説。Gitの導入、ローカルリポジトリを作成。リモートリポジトリを利用し、本番環境にデプロイする手続きを解説。
-
-
Gitはフォルダ自体を管理対象にはできない。空のフォルダを設定する手順
Gitはフォルダだけを管理対象にすることはできない。そのため空の.gitkeepファイルを作成し管理対象にすることで、それが入っているフォルダも管理対象にする、と言う手順で管理を行う。
-
-
エックスサーバーで独自SSLは永久無料で取り放題。利用方法と理由を解説!
エックスサーバーでは独自SSLが無料でいくつでも設置できるように!しかも、国、都道府県などの数項目の入力と数クリックだけという超簡単!SSL化しない理由がない!