PHP: json_decode сбрасывает NULL, спецификация не найдена - PullRequest
1 голос
/ 14 января 2011

Я пытался выяснить, почему эта строка 'json_encode'd не анализируется правильно, и натолкнулся на ранее отвеченные вопросы, которые имели последовательность спецификации UTF, которая выдавала ошибку, но не помогли мне здесь.

Вот код, который в настоящее время не работает:

//Decode the notes attached to the sig
$aNotes = json_decode($rule->getNotes(),true);
$bom = pack("CCC",0xef,0xbb,0xbf);
if(0 == strncmp($rule->getNotes(),$bom,3))
{
    print('BOM detected - json encoding in UTF-8<br/>');
}
else
{
    print('BOM NOT detected - json encoding correctly<br/>');
}
print('rule->getNotes:<br/>' . $rule->getNotes() .'<br/>');
var_dump($aNotes);

, который генерирует этот результат:

BOM NOT detected - json encoding correctly
rule->getNotes:
[{"lDate":"Unknown","sAuthor":"Unknown","sNote":"This is a general purpose Russian spam rule that matches anything starting with 2, 3 or 4 hex digits followed by a domain name ending with .ru -RSK 2010-05-10"},{"lDate":"1295031463082","sAuthor":"Drew Thorstenson","sNote":"this is Ryan's ru rule"}]
NULL

Я выполнил его через JSON Lint, которыйсказал, что он действителен, и анализатор JSON, который тоже правильно его проанализировал.

Любое понимание будет с благодарностью.

1 Ответ

1 голос
/ 15 января 2011

Проблема не в спецификации.Возможно, вы выполнили htmlspecialchars для строки json перед тем, как сохранить ее в своей базе данных, поэтому в ней есть HTML-сущности кавычек, а не кавычек.Чтобы заставить его работать, вы можете использовать:

$aNotes = json_decode(htmlspecialchars_decode($rule->getNotes()),true);

Или просто не делать htmlspecialchars при сохранении данных JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...