ひでメモ

プログラムについて勉強したことを書きます。たぶん。

【PHP】文字列の一部分を切り取りたい場合 mb_substr を使いましょう

タイトルは自戒です。

概要

日本語(マルチバイト文字)に対してsubstr()を使用してDB保存時にエラーになってしまった…
※ DBは Postgresql です

ERROR: invalid byte sequence for encoding "UTF8": 0x8b

ちゃんとエラーになるんですね。賢い…

対処

日本語などのマルチバイトの文字にはmb_substr()を使いましょう。

原因

日本語などのマルチバイトの文字コードsubstr()で切り取ると文字を構成するバイトの途中で区切られてしまい、存在しない文字となってしまい上記のようなエラーになります。(表示上は文字化けしたりする)

感想

文字を扱う場合は基本的にマルチバイト文字だと思って、対応しているメソッドを使うように気をつけないといけないですね。