PHP var_dump()如果没有清理,为什么字符串计数会更大?
我想检查通过curl调用post的字符串(json)是否以特定的子字符串开头。当我不断地得到returnPHP 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
FALSE
而不是TRUE
时,我试图调试它。我首先调整了我的代码,这样它将接受$\u GET
而不是$\u POST
,这样我就可以在url中传递查询字符串。我总是清理传入的数据,但我的问题似乎与此有关
我做了一个echo var_dump()对数据执行code>操作,并发现有和无清理时的字符串计数不相等
这是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,然后以更“结构化”的方式检查其内容呢?是的,你说得对,我将采用这种方法。再次感谢