【发布时间】:2012-08-20 11:09:05
【问题描述】:
在将字符串从一个字符集转换为另一个字符集之前,是否有可能知道这种转换是否无损?
如果我尝试将 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 或任何其他库来做到这一点。
【问题讨论】:
-
你试过检查字符串大小
mb_strlen吗? -
这将失败:如果将单个字符转换为
?,则长度将相等,至少对于 mbstring。如果您的想法只是删除了不可转换的字符,那它会很有趣。 -
他的例子比较了两个字符串,而不是字符串的长度。当其中一个包含问号而另一个包含另一个字符时,字符串将不相等。
标签: php character-encoding iconv mbstring