/ecrire/inc/json.php

https://github.com/denisbz/SPIP-1 · PHP · 83 lines · 61 code · 5 blank · 17 comment · 2 complexity · f0e73588f088c7f6b008cc04b75a12a4 MD5 · raw file

  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2011 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
  9. * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. if (!defined('_ECRIRE_INC_VERSION')) return;
  12. // Les fonctions de toggg pour faire du JSON
  13. /**
  14. * Transform a variable into its javascript equivalent (recursive)
  15. * @access private
  16. * @param mixed the variable
  17. * @return string js script | boolean false if error
  18. */
  19. // http://doc.spip.org/@var2js
  20. function var2js($var) {
  21. $asso = false;
  22. switch (true) {
  23. case is_null($var) :
  24. return 'null';
  25. case is_string($var) :
  26. return '"' .addcslashes($var, "\"\\\n\r/") . '"';
  27. case is_bool($var) :
  28. return $var ? 'true' : 'false';
  29. case is_scalar($var) :
  30. return (string)$var;
  31. case is_object( $var) :
  32. $var = get_object_vars($var);
  33. $asso = true;
  34. case is_array($var) :
  35. $keys = array_keys($var);
  36. $ikey = count($keys);
  37. while (!$asso && $ikey--) {
  38. $asso = $ikey !== $keys[$ikey];
  39. }
  40. $sep = '';
  41. if ($asso) {
  42. $ret = '{';
  43. foreach ($var as $key => $elt) {
  44. $ret .= $sep . '"' . $key . '":' . var2js($elt);
  45. $sep = ',';
  46. }
  47. return $ret ."}";
  48. } else {
  49. $ret = '[';
  50. foreach ($var as $elt) {
  51. $ret .= $sep . var2js($elt);
  52. $sep = ',';
  53. }
  54. return $ret ."]";
  55. }
  56. }
  57. return false;
  58. }
  59. if(!function_exists('json_encode')) {
  60. function json_encode($v) { return var2js($v); }
  61. }
  62. // http://doc.spip.org/@json_export
  63. function json_export($var) {
  64. $var = json_encode($var);
  65. // flag indiquant qu'on est en iframe et qu'il faut proteger nos
  66. // donnees dans un <textarea> ; attention $_FILES a ete vide par array_pop
  67. if (defined('FILE_UPLOAD'))
  68. return "<textarea>".htmlspecialchars($var)."</textarea>";
  69. else
  70. return $var;
  71. }
  72. ?>