PHPで文字列がシングルバイトであるかをチェックする
PHP で文字列がシングルバイト文字だけで構成されるかをチェックするには、文字列のエンコーディングを指定して 文字列の長さ(桁数)とバイト数が一致すること をチェックします。
ソースコード
/**
* 文字列がシングルバイト文字だけで構成されるかチェックします
* @param string $str 文字列
* @param string $encodingType 文字列のエンコーディング
* @return bool 文字列がシングルバイト文字だけで構成されている場合はtrue、それ以外はfalse
*/
function isSingleByteString(string $str, string $encodingType = null) {
if(!$encodingType) {
$encodingType = mb_internal_encoding();
}
if(!canConvertToTargetEncoding($str, $encodingType)) {
return false;
}
return strlen(mb_convert_encoding($str, $encodingType)) === mb_strlen($str);
}
/**
* 文字列が指定した文字エンコーディングに変換できるかチェックします
* @param string $str 文字列
* @param string $targetEncoding 変換したい文字エンコーディング
* @return bool 指定した文字エンコーディングに変換できる場合はtrue、それ以外はfalse
*/
function canConvertToTargetEncoding($str, $targetEncoding) {
$encoded = mb_convert_encoding($str, $targetEncoding);
$decoded = mb_convert_encoding($encoded, mb_internal_encoding(), $targetEncoding);
return $str === $decoded;
}
isSingleByteString 関数の引数に指定した文字列のエンコーディングに変換できない場合は false を返します。
検証
チェックしたい文字列とエンコーディングを指定して関数を実行してください。文字列のエンコーディングを省略すると UTF-8 でチェックします。