我需要比较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,这是一个类似于短耳猫头鹰的字符串&#39;对cvs文件的列。如果我找到了短耳猫头鹰&#39;在那个文件中我回来了。但是因为连字符,strcmp()在这里不起作用。如果为了测试目的而手动删除了hypen,strcmp()匹配。
UDATE 2
在php网站here评估strcmp()函数时,有一个&#34; Anonymous&#34;用户贡献说明collation
。他写道:
总之,strcmp()不一定使用ASCII代码顺序 每个角色都喜欢在C&#39; C&#39; locale,而是解析每个字符串 匹配语言特定的字符实体(例如&#39; ch&#39; in 西班牙语,或者&#39; dz&#39;在捷克语中,然后比较其整理顺序。 当两个字符实体具有相同的归类顺序时(例如 &#39; SS&#39;和&#39;�&#39;在德语中,它们相对于它们的代码进行了比较 strcmp(),或被strcasecmp()认为相等。
如果这是连字符char的问题怎么解决呢?
答案 0 :(得分:0)
你写的代码工作正常,我自己检查了
$str1 = 'short-eared owl';
$str2 = 'short-eared owl';
if (strcmp($str1, $str2)===0) {
echo "success";
} else{
echo 'fail';
}