【发布时间】:2017-03-28 10:10:22
【问题描述】:
我在旧的遗留代码库中偶然发现了 strstr 的问题。代码很多,但基本上测试用例会归结为:
$value = 2660;
$link = 'affiliateid=1449&zoneid=6011&placement_id=11736&publisher_id=1449&period_preset=yesterday&period_start=2017-03-27&period_end=2017-03-27';
var_dump(strstr($link, $value));
我希望这会返回false,因为“2660”不在字符串中,但它会返回d=1449&zoneid=6011&placement_id=11736&publisher_id=1449&period_preset=yesterday&period_start=2017-03-27&period_end=2017-03-27。
我意识到$value 应该是一个字符串,但我仍然不明白为什么它没有被 PHP 转换为字符串以及为什么它在链接中找到这个数字。
实际上,如果我尝试使用$value = '2660';,它会按预期返回false。
知道发生了什么吗?
【问题讨论】:
-
把它串起来
var_dump(strstr($link, (string)$value));PHP 不是一门严格的语言,当比较不同的类型时,它往往会给出奇怪的结果。就像(1=="a1")等于 true。 -
请原谅我的无知,但是......“strstr”是什么意思?我检查了文档,老实说,我不知道为什么会为这个函数取这样一个奇怪的名字!是“流浪线”吗? “在此范围内搜索字符串”? “字符串字符串”?
-
@Tsar,是的,它既不是一个好名字,也不是一个好的功能。也许它来自 strpos,它返回第一次出现的 position,而 strstr 返回第一次出现的 string。
-
@TSar:
strstr在另一个 string 中找到一个 string。不要为此责怪 PHP;名字来源于C。 -
@jwodder 嗯,这不是借口:P 但公平点。众所周知,C 确实...