PHP var_dump()如果没有清理,为什么字符串计数会更大?

PHP var_dump()如果没有清理,为什么字符串计数会更大?,php,var-dump,Php,Var Dump,我想检查通过curl调用post的字符串(json)是否以特定的子字符串开头。当我不断地得到returnFALSE而不是TRUE时,我试图调试它。我首先调整了我的代码,这样它将接受$\u GET而不是$\u POST,这样我就可以在url中传递查询字符串。我总是清理传入的数据,但我的问题似乎与此有关 我做了一个echo var_dump()操作,并发现有和无清理时的字符串计数不相等 这是json:[{“userProfileUrl”:“/users/jDoe”,“avatar”:“/images

我想检查通过curl调用post的字符串(json)是否以特定的子字符串开头。当我不断地得到return
FALSE
而不是
TRUE
时,我试图调试它。我首先调整了我的代码,这样它将接受
$\u GET
而不是
$\u POST
,这样我就可以在url中传递查询字符串。我总是清理传入的数据,但我的问题似乎与此有关

我做了一个
echo var_dump()操作,并发现有和无清理时的字符串计数不相等

这是json:
[{“userProfileUrl”:“/users/jDoe”,“avatar”:“/images/1.jpg”,“name”:“John Doe”,“id”:1}]

以下是用于调试的url的外观:

example.com?file=[{“userProfileUrl”:“/users/jDoe”,“avatar”:“/images/1.jpg”,“name”:“John Doe”,“id”:1}]

这是执行检查的代码:

function verifyFileStart($string, $startString)
{
    $len = strlen($startString);
    return (substr($string, 0, $len) === $startString);
}
这与消毒有关:

<?php
define("STARTSWITH", '[{"userProfileUrl":"');

$file = $_GET['file'];

// With Sanitize
$file = filter_var($file, FILTER_SANITIZE_STRING);

$part = STARTSWITH;

echo var_dump(verifyFileStart($file, $part));
echo nl2br("\n\n");
echo var_dump($file);
echo nl2br("\n\n");
echo var_dump($part);

// Here is the function (verifyFileStart) that does the checking
?>
<?php
define("STARTSWITH", '[{"userProfileUrl":"');

$file = $_GET['file'];

/* Without Sanitize
$file = filter_var($file, FILTER_SANITIZE_STRING);*/

$part = STARTSWITH;

echo var_dump(verifyFileStart($file, $part));
echo nl2br("\n\n");
echo var_dump($file);
echo nl2br("\n\n");
echo var_dump($part);

// Here is the function (verifyFileStart) that does the checking
?>
这是没有消毒的:

<?php
define("STARTSWITH", '[{"userProfileUrl":"');

$file = $_GET['file'];

// With Sanitize
$file = filter_var($file, FILTER_SANITIZE_STRING);

$part = STARTSWITH;

echo var_dump(verifyFileStart($file, $part));
echo nl2br("\n\n");
echo var_dump($file);
echo nl2br("\n\n");
echo var_dump($part);

// Here is the function (verifyFileStart) that does the checking
?>
<?php
define("STARTSWITH", '[{"userProfileUrl":"');

$file = $_GET['file'];

/* Without Sanitize
$file = filter_var($file, FILTER_SANITIZE_STRING);*/

$part = STARTSWITH;

echo var_dump(verifyFileStart($file, $part));
echo nl2br("\n\n");
echo var_dump($file);
echo nl2br("\n\n");
echo var_dump($part);

// Here is the function (verifyFileStart) that does the checking
?>
为什么第一个输出有消毒128,而没有消毒72

我的
函数verifyFileStart($string,$startString)
似乎只是说如果没有清理,子字符串就会在字符串中找到。我应该如何处理这一问题,并使其能够处理经过净化的数据


提前谢谢

filter\u var
添加字符以“清理”字符串的部分。 您可能看不到它们,因为您正在浏览器中查看字符串,它会将它们清除

使用“查看源代码”查看它,或者在调试器中放置断点并检查字符串。或者在开发工具网络中检查请求本身。或者使用小提琴手:)


您的字符串实际上变成了这条:<代码><代码实际变成了这条:<代码实际变成了您的字符串实际变成了这条:<代码实际变成了这条:<代码><代码>{{3.34;34;34;34;用户方/用户/34/用户/jDoe/JDO3/34;用户/用户/用户/JDOoe/jDoe/jDoe/34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;阿瓦塔塔塔和34;34;34;34;34;34;头头头头头头像和34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;34;带“,”[{“userProfileUrl”:“')的TSS;好的,您可以使用净化版本的开头,而不是当前版本。或者您可以尝试运行
filter\u var()
在进行比较之前,请先查看您当前的版本。但是,老实说,这种比较JSON字符串开头的方法似乎有点奇怪。也许您可以分享有关最终目标的更多详细信息……我需要比较开头,因为有多个JSON发送到服务器。我想知道它是否是有效的JSON,以及根据JSON,我需要检查开头,因为我从中提取JSON文件的源没有结构化。一些示例(用户、计算机、建筑)以以下开头:
[{“userProfileUrl”:“
[{“MachineName”:“
[{“Buildinght”:”
。因此,在我的index.php中,我有一个if语句来检查JSON是否包含用户、机器或构建。那么为什么不解码JSON,然后以更“结构化”的方式检查其内容呢?是的,你说得对,我将采用这种方法。再次感谢