我需要在循环基础上获取字符串比较中的一些元素,我想到的问题是UTF8。
通过==
比较可以包含UTF8字符的字符串是否安全?或者最好通过数据库引擎进行一些额外的SQL查询?
我已经在PHP中完成了测试并且看起来不错,但我想确认一下。
// if $_GET['city'] is "Łódź" the result is ==.
$city = 'Łódź';
if (isset($_GET['city']) && strtolower($_GET['city']) == strtolower($city)) {
echo '==';
}
答案 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");
设置正确的字符集