From: Michael M Slusarz Date: Thu, 4 Mar 2010 18:38:35 +0000 (-0700) Subject: Add support for limited error handling for json encoding errors (requires PHP 5.3+) X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=a5ad8f29c380ada137893bcafb329ed346c0bcce;p=horde.git Add support for limited error handling for json encoding errors (requires PHP 5.3+) --- diff --git a/framework/Serialize/lib/Horde/Serialize.php b/framework/Serialize/lib/Horde/Serialize.php index 57fdbc14c..217285ee8 100644 --- a/framework/Serialize/lib/Horde/Serialize.php +++ b/framework/Serialize/lib/Horde/Serialize.php @@ -254,10 +254,20 @@ class Horde_Serialize // $params = Source character set case self::JSON: - if (!empty($params)) { + if (!empty($params) && is_string($data)) { $data = Horde_String::convertCharset($data, $params, 'UTF-8'); } - $data = json_encode($data); + $tmp = json_encode($data); + + /* Basic error handling attempts. Requires PHP 5.3+. + * Error code 5, although not documented, indicates non UTF-8 + * data. */ + if (function_exists('json_last_error') && + (json_last_error() == 5)) { + $data = json_encode(Horde_Util::convertToUtf8($data)); + } else { + $data = $tmp; + } break; case self::LZF: diff --git a/framework/Serialize/package.xml b/framework/Serialize/package.xml index ead3ce3ae..8d0b87553 100644 --- a/framework/Serialize/package.xml +++ b/framework/Serialize/package.xml @@ -31,7 +31,9 @@ http://pear.php.net/dtd/package-2.0.xsd"> beta LGPL - * Initial Horde 4 package. + * Add support for limited error handling for json encoding errors + (requires PHP 5.3+). + * Initial Horde 4 package. diff --git a/framework/Serialize/test/Horde/Serialize/fixtures/badutf8.txt b/framework/Serialize/test/Horde/Serialize/fixtures/badutf8.txt new file mode 100644 index 000000000..4cfaadc1b --- /dev/null +++ b/framework/Serialize/test/Horde/Serialize/fixtures/badutf8.txt @@ -0,0 +1 @@ +Note: To play video messages sent to email, QuickTime® 6.5 or higher is required. diff --git a/framework/Serialize/test/Horde/Serialize/json_encode_badutf8.phpt b/framework/Serialize/test/Horde/Serialize/json_encode_badutf8.phpt new file mode 100644 index 000000000..0ed4810e5 --- /dev/null +++ b/framework/Serialize/test/Horde/Serialize/json_encode_badutf8.phpt @@ -0,0 +1,22 @@ +--TEST-- +JSON encode/decode tests (invalid UTF-8 input). +--SKIPIF-- + +--FILE-- + +--EXPECT-- +"Note: To play video messages sent to email, QuickTime\u00ae 6.5 or higher is required.\n"