【发布时间】:2015-10-23 12:32:47
【问题描述】:
我需要比较 2 个字符串而不替换任何内容。
$str1 = 'short-eared owl';
$str2 = 'short-eared owl';
if (strcmp($str1, $str2)===0) { do this and that …}
这里的问题是连字符。即使两个字符串相等, strcmp() 也不会产生 0(相等)。为什么?
如何比较这些字符串是否正确?
更新
这是基本的代码
<?php
$cat=$_GET["cat"];
if (($handle = fopen($csvFile, "r")) !== FALSE) {
$dataArray = fgetcsv($handle, 1000, ";");
while (($dataArray = fgetcsv($handle, 1000, ";")) !== FALSE) {
for ($i=0; $i < 4 ; $i++) {
if (strcmp($cat,$dataArray[$i])===0 ) {
// do this and that
}
}
}
fclose($handle);
}
?>
我所做的是将 $_GET var(它是一个类似于 'short-eared owl' 的字符串)与 cvs 文件的列进行比较。如果我在该文件中找到“短耳猫头鹰”,我会返回。但是 strcmp() 因为连字符在这里不起作用。如果我出于测试目的手动删除 hypen,则 strcmp() 匹配。
UDATE 2
在 php 站点 here 评估 strcmp() 函数时,有一个“匿名”用户贡献说明谈论 collation。他写道:
综上所述,strcmp() 不一定使用 ASCII 码顺序 每个字符都像“C”语言环境中一样,而是解析每个字符串 匹配特定语言的字符实体(例如 'ch' in 西班牙语或捷克语中的“dz”),然后比较其排序规则。 当两个字符实体具有相同的排序规则时(例如 'ss' 和 '�' 在德语中),它们相对于它们的代码进行比较 strcmp(),或者被 strcasecmp() 认为相等。
如果这是连字符字符的问题如何解决?
【问题讨论】:
-
它们可能看起来相同的连字符,但它们实际上是相同的字符吗?
-
$str2 实际上是 $str1 的副本。所以我假设它们也是相同的字符
-
@AbraCadaver 感谢您提供该链接。以前没见过。比较结果为 0(相等)。在我的代码中不是。我必须更深入地潜水......嗯
-
您是否定义了这两个变量的变量类型?都是同一类型吗?因为 === 运算符以及数据也匹配它们应该具有相同的类型
标签: php