【PHP】文字列の一部分を切り取りたい場合 mb_substr を使いましょう
タイトルは自戒です。
概要
日本語(マルチバイト文字)に対してsubstr()
を使用してDB保存時にエラーになってしまった…
※ DBは Postgresql です
ERROR: invalid byte sequence for encoding "UTF8": 0x8b
ちゃんとエラーになるんですね。賢い…
対処
日本語などのマルチバイトの文字にはmb_substr()
を使いましょう。
原因
日本語などのマルチバイトの文字コードをsubstr()
で切り取ると文字を構成するバイトの途中で区切られてしまい、存在しない文字となってしまい上記のようなエラーになります。(表示上は文字化けしたりする)
感想
文字を扱う場合は基本的にマルチバイト文字だと思って、対応しているメソッドを使うように気をつけないといけないですね。