UTF8字符串上的==是否安全?

时间:2014-01-15 20:08:59

标签: php mysql string comparison

我需要在循环基础上获取字符串比较中的一些元素,我想到的问题是UTF8。

通过==比较可以包含UTF8字符的字符串是否安全?或者最好通过数据库引擎进行一些额外的SQL查询?

我已经在PHP中完成了测试并且看起来不错,但我想确认一下。

// if $_GET['city'] is "Łódź" the result is ==.
$city = 'Łódź';
if (isset($_GET['city']) && strtolower($_GET['city']) == strtolower($city)) {
    echo '==';
}

3 个答案:

答案 0 :(得分:6)

比较2个字符串时,=====之间几乎没有区别。

如果你不比较存储为字符串的数字,那你就没事了。

不同结果的示例:

var_dump('01' === '1'); // false
var_dump('01' == '1'); // true

答案 1 :(得分:1)

是的,它应该是安全的。如果==运算符执行“类型安全比较”,则运算符===会在两种不同类型之间进行转换。由于您要比较两个字符串,因此没有区别。

答案 2 :(得分:0)

PHP Documentation about comparison operators ==中所述,检查两个变量是否保持相同的值,因为它们都已转换为相同的类型。因此,您可以假设在PHP中进行这样的比较是安全的。无论如何你正在做的事情可能导致其他错误,因为你使用的是strtolower(不是多字节安全)而不是mb_strtolower(多字节安全)。显然在使用任何mb_ *函数之前,你应该记得通过mb_internal_encoding("UTF-8");设置正确的字符集