PHP var_dump (), почему число строк больше, если не обработано? - PullRequest
0 голосов
/ 06 февраля 2020

Я хотел бы проверить, начинается ли строка (json), которая была отправлена ​​с помощью вызова curl, с указанной подстрокой c. Когда я продолжал получать возврат 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":"" 

Почему первый вывод с sanitize 128 и вывод без sanitize 72?

My function verifyFileStart($string, $startString) только кажется, что подстрока находится в строке, если не продезинфицировать. Как мне справиться с этим и заставить его работать с обработанными данными?

Заранее спасибо!

1 Ответ

0 голосов
/ 06 февраля 2020

filter_var добавляет символы для «дезинфекции» частей строк. Вы, вероятно, не видите их, потому что вы смотрите на строку в браузере, и она их дезинфицирует.

Посмотрите на нее с помощью «view source», или установите точку останова и изучите строку в отладчик. Или изучите сам запрос в Dev Tools Network. Или используйте 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}]

...