追記
コメントで@mpywさんの紹介されてるコードが有効な場合があります。ご検討ください。
要するにUTF-8にすると4バイトになる文字を弾きたい。MySQLが悪い。元コードはクラスの静的メソッド。
<?php
function assert_mysql_utf8 ($value)
{
$len = mb_strlen($value, 'utf-8');
for ($n = 0; $n < $len; $n++) {
$c = mb_substr($value, $n, 1, 'utf-8');
if (strlen($c) > 3) {
throw new RangeException;
}
}
}
strlen
とmb_strlen
の差異を利用する。
果たしてこんな検証処理をアプリケーション側でするべきなのか激しく悩む。全部MySQLが悪い。