【问题标题】:PHP compare strings with hyphenPHP比较字符串和连字符
【发布时间】: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


【解决方案1】:

您编写的代码运行良好,我自己检查过

$str1 = 'short-eared owl';
$str2 = 'short-eared owl';

if (strcmp($str1, $str2)===0) { 
    echo "success";

} else{
    echo 'fail';
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    相关资源
    最近更新 更多