文字列を文字セットから別の文字セットに変換する前に、この変換がロスレスになるかどうかを知ることは可能ですか?
たとえば、UTF-8 文字列を latin1 に変換しようとすると、変換できない文字が に置き換えられ?
ます。結果の文字列をチェックし?
て、変換がロスレスであるかどうかを確認することは、明らかに選択肢ではありません。
私が今見ることができる唯一の解決策は、元の文字セットに戻し、元の文字列と比較することです:
function canBeSafelyConverted($string, $fromEncoding, $toEncoding)
{
$encoded = mb_convert_encoding($string, $toEncoding, $fromEncoding);
$decoded = mb_convert_encoding($encoded, $fromEncoding, $toEncoding);
return $decoded == $string;
}
ただし、これは簡単で汚いものであり、予期しない動作が発生する場合があり、 mbstring、iconv、またはその他のライブラリを使用してこれを行うよりクリーンな方法があると思います。