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

Pak*_*ski 2 php character-encoding

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

\n\n

我必须比较 2 个不同数据库上的 2 列之间的值(我无权更改这些值)。\ndb1 中的编码UTF-8。\ndb2 中的编码latin1。

\n\n

例如,这些是我正在比较的两个值,并且在比较中应该是相同的:

\n\n
**db1_value** = \'Maranhão\'\n**db2_value** = \'Maranh\xc3\xa3o\';\n
Run Code Online (Sandbox Code Playgroud)\n\n

它们使用 utf_encode 的显示方式完全相同,显示不是问题。\n我想将变量db1_value与数据库中的字段db2_value进行比较,所以我使用非常简单的方法,如下所示:

\n\n
$query = "SELECT **db2_value** FROM db2 WHERE db2_field LIKE \'" . **$db1_value** . "\'";\n
Run Code Online (Sandbox Code Playgroud)\n\n

比较之前如何\'Maranhão\'转换\'**Maranh\xc3\xa3o**\'

\n\n

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

\n\n

感谢对此的任何建设性评论。

\n\n

多谢,

\n

Dmi*_*tri 5

您需要的不是从实际值转换UTF-8,而是从HTML-ENTITIES实际值转换,幸运的是 mbstring 扩展可以进行这样的转换:

$latin1 = mb_convert_encoding($db1_value, "ISO-8859-1", "HTML-ENTITIES");
Run Code Online (Sandbox Code Playgroud)

这里我们指定HTML-ENTITIESFROM字符集

然后你就可以$latin1和你的进行比较了$db2_value