如何在PHP中安全地将UTF-8与ISO 8859-1(latin1)进行比较?

时间:2012-07-15 17:12:59

标签: php character-encoding

这可能是一个愚蠢的问题,但似乎没有什么对我有用:

我必须比较2个不同数据库(我无权更改值)的2列之间的值。 db1 中的编码为UTF-8。 db2 中的编码是latin1。

所以,例如,这些是我正在比较的2个值,在比较中应该是相同的:

**db1_value** = 'Maranhão'
**db2_value** = 'Maranhão';

它们使用utf_encode以完全相同的方式显示,显示不是问题。 我想将变量 db1_value 与db中的字段 db2_value 进行比较,所以我使用的东西非常简单:

$query = "SELECT **db2_value** FROM db2 WHERE db2_field LIKE '" . **$db1_value** . "'";

如何在比较之前将'Maranhão'转换为'**Maranhão**'

我尝试了几种方法,iconv,utf8_encode和其他一些方法,但它们对变量没有任何影响。我只是想知道我是否采取了正确的方法来做到这一点。

对此有任何建设性意见。

非常感谢,

1 个答案:

答案 0 :(得分:4)

您需要不是从UTF-8而是从HTML-ENTITIES转换为实际值 幸运的是,mbstring扩展具有这样的转换:

$latin1 = mb_convert_encoding($db1_value, "ISO-8859-1", "HTML-ENTITIES");

在此,我们将HTML-ENTITIES指定为FROM字符集

然后,您可以将$latin1$db2_value进行比较。