summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid <david0@github.com>2014-07-10 17:44:40 +0200
committerDavid <ottodavid@gmx.net>2014-08-22 12:41:56 +0200
commit75e52c69f5243d17bfe9274f3274f717a8cff8a4 (patch)
tree67ada48397ae70f8e294eaecde14b7fc5f2c316f
parentd78e127d34b36ddd2b3465192218ef87f205828e (diff)
Convert encoding of all values inside an array before json_serialize (Fixes #524)
(cherry picked from commit 8e07d0781150206fae722d9b9dcbdafd727665f6)
-rw-r--r--framework/Web/Javascripts/TJavaScript.php25
1 files changed, 20 insertions, 5 deletions
diff --git a/framework/Web/Javascripts/TJavaScript.php b/framework/Web/Javascripts/TJavaScript.php
index 44dc354f..d7703bfd 100644
--- a/framework/Web/Javascripts/TJavaScript.php
+++ b/framework/Web/Javascripts/TJavaScript.php
@@ -204,7 +204,6 @@ class TJavaScript
else
return '';
}
-
/**
* Encodes a PHP variable into javascript string.
* This method invokes json_encode to perform the encoding.
@@ -213,16 +212,32 @@ class TJavaScript
*/
public static function jsonEncode($value, $options = 0)
{
- if (is_string($value) &&
- ($g=Prado::getApplication()->getGlobalization(false))!==null &&
- strtoupper($enc=$g->getCharset())!='UTF-8')
- $value=iconv($enc, 'UTF-8', $value);
+ if (($g=Prado::getApplication()->getGlobalization(false))!==null &&
+ strtoupper($enc=$g->getCharset())!='UTF-8') {
+ self::convertToUtf8($value, $enc);
+ }
+
$s = @json_encode($value,$options);
self::checkJsonError();
return $s;
}
/**
+ * Encodes an string or the content of an array to UTF8
+ * @param string|array|mixed $value
+ * @param string $sourceEncoding
+ */
+ private static function convertToUtf8(&$value, $sourceEncoding) {
+ if(is_string($value))
+ $value=iconv($sourceEncoding, 'UTF-8', $value);
+ else if (is_array($value))
+ {
+ foreach($value as &$element)
+ self::convertToUtf8($element, $sourceEncoding);
+ }
+ }
+
+ /**
* Decodes a javascript string into PHP variable.
* This method invokes json_decode to perform the decoding.
* @param string string to be decoded