PHP var_dump()如果不进行消毒,为什么字符串计数更大?

问题描述 投票:0回答:1

我想做一些检查,是否通过curl调用发布的字符串(json)以特定的子字符串开头。当我一直返回FALSE而不是TRUE时,我尝试调试它。我首先调整了代码,使其可以接受$_GET而不是$_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
?>

var_dump()输出:

bool(false)

string(128) "[{"userProfileUrl":"/users/jDoe","avatar":"1","name":"John Doe","id":1}]"

string(20) "[{"userProfileUrl":"" 

这没有消毒:

<?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
?>

var_dump()输出:

bool(true)

string(72) "[{"userProfileUrl":"/users/jDoe","avatar":"1","name":"John Doe","id":1}]"

string(20) "[{"userProfileUrl":"" 

为什么第一个输出具有消毒128,而输出没有消毒72?

我的function verifyFileStart($string, $startString)似乎只是说,如果未清除子字符串,则在字符串中找到该子字符串。我应该如何处理并使其与经过清理的数据一起使用?

提前感谢!

php var-dump
1个回答
0
投票

filter_var添加字符以“清理”字符串的一部分。您可能看不到它们,因为您正在浏览器中查看字符串,并且将它们消毒了。

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

您的字符串实际上变为:[{&#34;userProfileUrl&#34;:&#34;/users/jDoe&#34;,&#34;avatar&#34;:&#34;/images/1.jpg&#34;,&#34;name&#34;:&#34;John Doe&#34;,&#34;id&#34;:1}]

© www.soinside.com 2019 - 2024. All rights reserved.