大企業営業から未経験ITエンジニアを目指すブログ

アラサー大企業営業から未経験ITエンジニアを目指すブログ。日々学んだことを忘備録的に記します。

プログラミングの文字と文字コード(PHP)

■文字を数えるPHP関数 

①strlen("文字列");

文字のバイト数を返す。

 

②mb_strlen ("文字列",  (文字エンコーディング));

特定の文字エンコーディングでの文字数。

第2引数が無い場合、内部文字エンコーディングを使用。

"こんにちは"→5

文字エンコーディング・・・UTF-8 など。

 

■文字エンコーディングとは?

人間が使う文字を、数字しか認識できないコンピュータに区別させるための対応表が存在する。その対応表のこと。

実際には対応表には2つある。

①「文字」と「文字に割り当てた番号」の対応表(=符号化文字集合!)

 →対象の指定。どの文字に番号をつけるか。

 JIS X 0208Unicodeなど。

②「文字に割り当てた番号」と「実際にコンピュータが扱う数字」の対応表

 (=文字符号化方式!)

 →それぞれの文字をどの数字にするか。

 Shift-JIS、EUC-JP、UTF-8など。

 ⇒②が文字エンコーディングのこと!

https://wa3.i-3-i.info/word15291.html

 

UTF-8は、ASCIIと互換性を持たせた規格となっているため、一部の文字はASCIIと全く同じです。ASCIIと同じ部分は1バイトで表現し、そのほかの部分を2〜6バイトで表現する可変長の符号化方式となっています。漢字、仮名文字は3〜4バイトで表現・・・

https://ferret-plus.com/7006

 

Unicodeで個々の文字に振るコードをコードポイントと呼ぶ。

コードポイントの範囲によってバイト数が違う。

・半角英数字と記号は1バイト。(ASCII文字のため)

・日本語のほとんどはUTF-8で3バイトになる。

 ただし一部の漢字(第3・第4水準漢字の大半)は4バイト。

 ものによっては8バイトなども。

https://tech.sanwasystem.com/entry/2017/11/13/102531

 

■内部文字エンコーディングとは?

 php.iniファイルの中にある「mbstring.internal_encoding」の設定のこと。

 

php.iniファイルとは?

 PHPのプログラムを動かすためのプログラムの設定ファイル。

 https://wa3.i-3-i.info/word13611.html

 

■疑問

PHPプログラムを作っているとき、どこの文字エンコーディングに合わせて指定すれば良いのか?

mbstring.internal_encodingは「PHP 5.6.0 で 非推奨になります。この機能に頼らないことを強く推奨します。PHP 5.6 以降のユーザーは、これを空のままにしておいて、代わりに default_charset を設定すべきです。」になってるし。

https://www.php.net/manual/ja/mbstring.configuration.php#ini.mbstring.internal-encoding

default_charsetは「PHP 5.6.0 以降は "UTF-8" がデフォルトになり、 htmlentities() や html_entity_decode() そして htmlspecialchars() で encoding パラメータを省略した場合は、このデフォルト値を利用します。」だって。

https://www.php.net/manual/ja/ini.core.php#ini.default-charset

 

・例えば、Twitterに自動投稿させたい時、Twitterの文字数制限とどう合わせたら良いのか?

 各言語毎の文字列制限を調べて言語に合わせて条件分岐させないといけない?