php无法比较两个完全相同的字符串

时间:2013-04-18 07:18:24

标签: php string

我已经遵循了一段代码

$path = $resource['path'];
if (strpos($path, base_url()) == 0) {
    $path = FCPATH. substr($path, strlen(base_url()));
}
echo '<pre>';
$x = '/home/gofrendi/public_html/No-CMS/themes/ubuntu/assets/default/script.js';
var_dump($path);
var_dump($x==$path);
var_dump('/home/gofrendi/public_html/No-CMS/themes/ubuntu/assets/default/script.js' == $path);
echo '</pre>';

我确定$ path包含/home/gofrendi/public_html/No-CMS/themes/ubuntu/assets/default/script.js

这就是我得到的:

string(82) "/home/gofrendi/public_html/No-CMS/themes/ubuntu/assets/default/script.js"
bool(false)
bool(false)

似乎比较完全失败了。这有什么不对? PHP错误或我的错误?

修改 我也很高兴地向您展示此代码的结果:

echo '<pre>';
$x = '/home/gofrendi/public_html/No-CMS/themes/ubuntu/assets/default/script.js';
var_dump($path);
var_dump($x);
var_dump($x==$x);
var_dump($x==$path);
var_dump('/home/gofrendi/public_html/No-CMS/themes/ubuntu/assets/default/script.js' == $path);
echo '</pre>';

结果是:

string(82) "/home/gofrendi/public_html/No-CMS/themes/ubuntu/assets/default/script.js"
string(72) "/home/gofrendi/public_html/No-CMS/themes/ubuntu/assets/default/script.js"
bool(true)
bool(false)
bool(false)

再次编辑: 已解决,我为模板系统做了一些str_replace,将{{ used_theme }}更改为当前使用的主题。使用的主题是'ubuntu',其长度为6个字符,而{{used_theme}}的长度为10个字符。 执行代码后执行str_replace。这也会更改var_dump结果,从而产生这种意外行为。 谢谢大家的帮助。

3 个答案:

答案 0 :(得分:0)

你的$ path有一些不同,因为它显示字符串(82)字符而$ x有字符串(72)你必须是一些html字符isssue。尝试修剪然后比较。

答案 1 :(得分:0)

正如您所看到的,两个strings之间存在一些差异,其中一个length "82"other is of "72"字符串中可能存在一些不可见(非打印)字符

答案 2 :(得分:0)

字符编码问题可能,如果你启用了mbstring扩展,试试这个并相应地转换编码

echo mb_detect_encoding($x);
echo mb_detect_encoding($path);