LINUX.ORG.RU
решено ФорумTalks

Я люблю тебя, PHP!

 ,


0

2

Написал серверное приложение на чистом С. Оно слушает порт, а PHP с ним соединяется и получает данные в json-формате.

Несколько часов убил на то, чтобы понять почему PHP не может сделать json_decode. Наконец, написал минимальный пример:

$ cat test.php 
<?php

$s1 = '["1", "2"]';
echo "1 ", var_dump(json_decode($s1)), "\n";

$s2 = $s1 . "\0";
echo "2 ", var_dump(json_decode($s2)), "\n";

$ php test.php
1 array(2) {
  [0]=>
  string(1) "1"
  [1]=>
  string(1) "2"
}

2 NULL

Да это же просто феерично! Я добавил нулевой символ в конец строки, а она перестала быть корректным json, твою мать! Я даже сравнил побайтово две строки, вывев их в файл: отличие только в \0 на конце.

Что за специалист писал такой парсер json-а в php?!

---

Отныне это тред о впечатлениях, оставшихся после встречи с неочевидными, глупыми и неграмотными решениями в разных ЯП. Делись своими впечатлениями, лоровец.

★★

Последнее исправление: CYB3R (всего исправлений: 1)
Ответ на: Нехватает только js от Kalashnikov

От себя добавлю, что добавление к строковому буферу символа «\0» в языке С на корректность JSON-а не влияет :)

Вывод: json нормально умеют парсить только Perl да С.

bk_ ★★
() автор топика
Ответ на: комментарий от bk_

Вывод: json нормально умеют парсить только Perl да С.

Вывод: Perl и C имеют какие-то велосипедные парсеры, что ведет к возникновению сложноотлавливаемых ошибок при использованию в проекте нескольких языков.

BaBL ★★★★★
()
Ответ на: комментарий от Kalashnikov

Вариант outtaspace валится.

Потому что он использует вместо нормального JSON.pm какой-то бложиковый парсер, который копипастили разработчики всех быдлоязыков (тех, в которых вываливается парсер, судя по тексту топика).

bk_ ★★
() автор топика
Ответ на: комментарий от BaBL

что ведет к возникновению сложноотлавливаемых ошибок при использованию в проекте нескольких языков.

$out .= «\0»;

сложноотлавливаемых

\0

Хахаха.

bk_ ★★
() автор топика
Ответ на: комментарий от BaBL

Для Си '\0' это вообще признак конца строки. Так что ничего некорректного в этом нет.

KivApple ★★★★★
()
Ответ на: комментарий от bk_

Вывод: json нормально умеют парсить только Perl да С.

JavaScript Object Notation умеют парсить только C и perl, а JavaScript не умеет

seed_stil ★★
()
Ответ на: комментарий от bk_

В Module::CoreList отсутствует модуль которым я воспользовался и отсутствует модуль из вашего примера. Вы путаете язык программирования + его батарейку, с языком как платформой. Самый корректный пример - модули из батарейки.

outtaspace ★★★
()
Ответ на: комментарий от bk_

От себя добавлю, что добавление к строковому буферу символа «\0» в языке С на корректность JSON-а не влияет :)

Ты так говоришь, будто это что-то хорошее

vasily_pupkin ★★★★★
()
Ответ на: комментарий от bk_

От себя добавлю, что добавление к строковому буферу символа «\0» в языке С на корректность JSON-а не влияет :)

В конец добавление не влияет? А если посредине поставить?

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

А если посредине поставить?

то очевидно середина станет концом

wota ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.