在php中使用strlen时出现意外的字符串长度

时间:2014-07-01 11:52:06

标签: php strlen string-length

我遇到了问题,因为目前的结果非常意外。我正在计算一个散列的关键字长度,它肯定会给我一个意想不到的结果。

echo strlen("$2a$08$MphfRBNtQMLuNro5HOtw3Ovu20cLgC0VKjt6w7zrKXfj1bv8tNnNa");

输出 - 6

让我知道原因,以及为什么输出6

键盘链接 - http://codepad.org/pLARBx6F

3 个答案:

答案 0 :(得分:5)

您必须使用单引号'。使用双引号("),由于字符串中的$,部分内容会被解释为变量。

一般来说,除非你特别需要双打,否则习惯使用单引号并不是一个坏主意。

查看"变量"包含在这里。它们是$2a$08$MphfRBNtQM...... 前两个不能是变量,因为它们以数字开头,因此是6个字符。第三个确实可能是一个适当的变量,但由于它没有设置,它是空的。

答案 1 :(得分:1)

使用以下代码计算字符串长度 -

echo strlen('$2a$08$MphfRBNtQMLuNro5HOtw3Ovu20cLgC0VKjt6w7zrKXfj1bv8tNnNa');

您需要使用单引号,因为在第三次出现符号$时,字母表会在它之后开始,并将其视为新变量。所以在第三次$出现之前,只有6个字符存在,而你的字符串长度为6

答案 2 :(得分:-2)

尝试以下

<?php

echo strlen('$2a$08$MphfRBNtQMLuNro5HOtw3Ovu20cLgC0VKjt6w7zrKXfj1bv8tNnNa');

?>

如果您更改字符串并删除除第一个之外的其余'$'个符号,那么这将正常工作,因为通过添加$,它在PHP中具有特殊含义。