Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] json_encode()
Forum PHP.pl > Forum > Przedszkole
lukas_xplowd
Mam problem - potrzebuję uruchomić skrypt wykorzystujący funkcję json_encoding() na serwerze który obsługuje PHP 5.0.4 gdzie nie ma tej funkcji.
Niestety nie mam możliwości zmian ani wersji PHP ani samego serwera.

Czy jest jakiś sposób aby to obejść?
Albo jakaś podobna funkcja?

Za pomoc z góry dzięki.
seth-kk
np Zend_Json
piotrooo89
można się też pokusić o napisane samemu funkcji zamieniającą json'a na tablice.
Fifi209
Cytat(seth-kk @ 1.02.2010, 19:08:48 ) *

Do muchy z armaty?

json_encode
W notatkach masz przykład:
  1. /*
  2.   Convert PHP array to JSON
  3.   --
  4.   Using:
  5.   - on server side: echo(arr2json([PHP array]))
  6.   - on client side(JavaScript): var obj = eval('(' + [XMLHTTPRequest.responseText] + ')');
  7. */
  8. function arr2json($arr){
  9. foreach($arr as $k=>&$val) $json[] = $k.':'.php2js($val);
  10. if(count($json) > 0) return '{'.implode(',', $json).'}';
  11. else return '';
  12. }
  13. function php2js($val){
  14. if(is_array($val)) return arr2json($val);
  15. if(is_string($val)) return '"'.addslashes($val).'"';
  16. if(is_bool($val)) return 'Boolean('.(int) $val.')';
  17. if(is_null($val)) return '""';
  18. return $val;
  19. }

nospor
Można się też pokusić o zajrzenie do manuala:
http://pl2.php.net/manual/en/function.json-encode.php
i przejrzenie komentarzy. Niektóre zawierają rozwiązanie na tu zadane pytanie...
lukas_xplowd
Szczerze nie maiłem jeszcze styczności z zend framework'iem ale z tego co wyczytałem to aby go uruchomić to muszę mieć dostęp do php.ini - a tego nie mam. Poza tym Zend Framework wymaga PHP w wersji 5.1.4 a ja mam 5.0.4.

edit:
To była odpowiedź na post seth-kk.
Zaraz przyjrzę pozostałym pomysłom - dzięki za odzew.

seth-kk
nie masz kozystac z calego frameworka tylko z tej klasy i klas od ktorych jest zalezna i mysle ze to co masz wystarczy - odpal przekonamy sie
@fifi209: proponuje te armate poniewaz kozysta z json_encode() jesli to mozliwe
Fifi209
Cytat(lukas_xplowd @ 1.02.2010, 19:06:45 ) *
Mam problem - potrzebuję uruchomić skrypt wykorzystujący funkcję json_encoding() na serwerze który obsługuje PHP 5.0.4 gdzie nie ma tej funkcji.
Niestety nie mam możliwości zmian ani wersji PHP ani samego serwera.


Cytat(seth-kk @ 1.02.2010, 20:53:49 ) *
@fifi209: proponuje te armate poniewaz kozysta z json_encode() jesli to mozliwe

Nie wysilaj się i schowaj armatę do magazynu. Proponuję naukę czytania ze zrozumieniem... Autor napisał wyraźnie, że nie ma tej funkcji.
seth-kk
Cytat(seth-kk @ 1.02.2010, 20:53:49 ) *
...proponuje te armate poniewaz kozysta z json_encode() jesli to mozliwe

(jesli nie to kozysta z wlasnej implementacji)
Cytat(fifi209 @ 1.02.2010, 20:56:02 ) *
...Proponuję naukę czytania ze zrozumieniem...

fakt - przyda Ci sie
lukas_xplowd
@fifi209
Skorzystałem z proponowanej przez Ciebie funkcji ale nie do końca to działa.

Skrypt się uruchomił (bo nie krzyczy już, że nie ma funkcji json_encode()) ale niestety nie działa tak jak powinien.
Skrypt ma działać na zasadzie dynamicznej zmiany zawartości bez przeładowania poprzez wypełnienie formularza.

Sprawdzałem to też na lokalnym komputerze gdzie mam nowe PHP z json_encode() i jeśli podmienię tą funkcję na js2php() to niestety skrypt przestaje działać. Klikając na przycisk zapisz (button submit) nic się nie dzieje.
Fifi209
Dziwne ja testowałem i działało - w dodatku na dość zagmatwanym przykładzie i było ok.

Pokaż mi co Ty z tym robisz, że Ci to nie działa. haha.gif
lukas_xplowd
Konkretnie próbuję to: http://www.phpletter.com/download_project_...p?version_id=27
uruchomić.

Testuję już po kolei wszystkie funkcje z komentarzy na php.net i albo skrypt nie działa (w sposób opisany wyżej) albo krzaki wychodzą :/

edit

Udało się biggrin.gif

Funkcja z komentarzy na php.net

  1. <?php
  2. if (!function_exists('json_encode'))
  3. {
  4. function json_encode($a=false)
  5. {
  6. if (is_null($a)) return 'null';
  7. if ($a === false) return 'false';
  8. if ($a === true) return 'true';
  9. if (is_scalar($a))
  10. {
  11. if (is_float($a))
  12. {
  13. // Always use "." for floats.
  14. return floatval(str_replace(",", ".", strval($a)));
  15. }
  16.  
  17. if (is_string($a))
  18. {
  19. static $jsonReplaces = array(array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'));
  20. return '"' . str_replace($jsonReplaces[0], $jsonReplaces[1], $a) . '"';
  21. }
  22. else
  23. return $a;
  24. }
  25. $isList = true;
  26. for ($i = 0, reset($a); $i < count($a); $i++, next($a))
  27. {
  28. if (key($a) !== $i)
  29. {
  30. $isList = false;
  31. break;
  32. }
  33. }
  34. $result = array();
  35. if ($isList)
  36. {
  37. foreach ($a as $v) $result[] = json_encode($v);
  38. return '[' . join(',', $result) . ']';
  39. }
  40. else
  41. {
  42. foreach ($a as $k => $v) $result[] = json_encode($k).':'.json_encode($v);
  43. return '{' . join(',', $result) . '}';
  44. }
  45. }
  46. }
  47. ?>



Wielkie dzięki Panowie za pomoc!

Dla potomnych kod wyżej - potwierdzone działa na 100% z PHP 5.0.4
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.