我想做一些检查,是否通过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)
似乎只是说,如果未清除子字符串,则在字符串中找到该子字符串。我应该如何处理并使其与经过清理的数据一起使用?
提前感谢!
filter_var
添加字符以“清理”字符串的一部分。您可能看不到它们,因为您正在浏览器中查看字符串,并且将它们消毒了。
用“查看源代码”查看它,或放置一个断点并在调试器中检查字符串。或在开发工具网络中检查请求本身。或使用Fiddler:)
您的字符串实际上变为:[{"userProfileUrl":"/users/jDoe","avatar":"/images/1.jpg","name":"John Doe","id":1}]