Skip to content
This repository has been archived by the owner on Jan 30, 2020. It is now read-only.

Commit

Permalink
Merge branch 'hotfix/zendframework/zendframework#6462-fix-phpcs-repor…
Browse files Browse the repository at this point in the history
…ted-errors' into develop

Forward port zendframework/zendframework#6462
  • Loading branch information
Ocramius committed Jul 27, 2014
173 parents 0967d72 + 6541083 + e4898d7 + 9c57882 + 3c03bad + 87df75a + 89e1265 + 5bc0027 + 83fd9fa + 3844e27 + a2b3a39 + cbb5bf2 + 3ef3347 + bc77506 + e5e4203 + 2a10a27 + 8ba934c + 23ca50c + fd53025 + d95e884 + fb9734f + c781722 + a76fdf6 + 7f04465 + 3bc62a9 + f574eb9 + 52d314b + bada1dc + 842e034 + b44331a + 8d1b4e9 + 59d10c2 + e630f51 + 96f4abb + bfcf88b + e2e6ee0 + bd53446 + 62fffaa + 075b3a5 + dfc876b + 2056187 + ccaac9b + 5088038 + e4fa7ad + efc7cf5 + 0f33a2d + a3589c7 + 3ddf1a3 + d86b089 + 491f302 + c0efd18 + f9e572c + 3077af2 + a811b75 + 585f923 + 9b385ff + ec1f853 + b1a5d58 + a1cf97e + c1b8314 + 1482b41 + 7d80b85 + 869bbf8 + 403ce8d + 008804b + 87522da + d31ec42 + 2f2a15a + 585cc82 + a9438e2 + d59be1f + 643e2df + a49e8f2 + 08fd26d + b52d5dc + de5abc1 + 48f2d19 + 34ca3a0 + 5169094 + 25abd15 + baa09a1 + 355680a + b2b0d91 + 6986810 + 7b1513c + 6f9a6cc + 39a1c1e + 92dbdb3 + ac3a5aa + ee15c3a + 67f414a + 49138fb + a4ebc7b + 6b11637 + f128e27 + 41746af + cc083fe + 3d54828 + ccb0392 + a8ab5b0 + 1128b0c + b5ca6d2 + 5ef536e + 6878fa7 + 66a7225 + 869024d + 82f5ac4 + a831196 + dde75d7 + 9aba77c + 8474496 + 7c3bb76 + ad8e418 + a262925 + ee212be + 7f01229 + 42758bb + e91fa40 + 21394b2 + c56da7c + 9327465 + 95794f5 + 86491b5 + b24dc4f + 295467a + dc56d1e + d4c89e8 + ddd7418 + 8d06baa + ba834b9 + 292f809 + d235382 + 2b8ddfb + a90e617 + 8897e13 + 88b1391 + dc0450d + 9fa0112 + 7b9adef + 8010d61 + 8aa284d + d94ef71 + a3e5e8a + 6601fe6 + 6290724 + 5e7c801 + d74f16a + f3c55cf + f7787b1 + e1c3e3c + 88e1629 + 3314d9a + 09dfc28 + 6eac5f2 + aa1a1a6 + c602a92 + 9275250 + 11d2caa + d3c8400 + 295642a + bcf5cb7 + 1f38df6 + 5ea4665 + c66b1db + 7869e69 + 24907b1 + 04bd745 + 4dd2224 + c288736 + 5a22149 + 2ce8414 + 4b76f70 + be275c7 commit 5012195
Showing 1 changed file with 73 additions and 73 deletions.
146 changes: 73 additions & 73 deletions src/Decoder.php
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,79 @@ class Decoder
*/
protected $tokenValue;

/**
* Decode Unicode Characters from \u0000 ASCII syntax.
*
* This algorithm was originally developed for the
* Solar Framework by Paul M. Jones
*
* @link http://solarphp.com/
* @link https://github.com/solarphp/core/blob/master/Solar/Json.php
* @param string $chrs
* @return string
*/
public static function decodeUnicodeString($chrs)
{
$chrs = (string) $chrs;
$utf8 = '';
$strlenChrs = strlen($chrs);

for ($i = 0; $i < $strlenChrs; $i++) {
$ordChrsC = ord($chrs[$i]);

switch (true) {
case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $i, 6)):
// single, escaped unicode character
$utf16 = chr(hexdec(substr($chrs, ($i + 2), 2)))
. chr(hexdec(substr($chrs, ($i + 4), 2)));
$utf8char = self::_utf162utf8($utf16);
$search = array('\\', "\n", "\t", "\r", chr(0x08), chr(0x0C), '"', '\'', '/');
if (in_array($utf8char, $search)) {
$replace = array('\\\\', '\\n', '\\t', '\\r', '\\b', '\\f', '\\"', '\\\'', '\\/');
$utf8char = str_replace($search, $replace, $utf8char);
}
$utf8 .= $utf8char;
$i += 5;
break;
case ($ordChrsC >= 0x20) && ($ordChrsC <= 0x7F):
$utf8 .= $chrs{$i};
break;
case ($ordChrsC & 0xE0) == 0xC0:
// characters U-00000080 - U-000007FF, mask 110XXXXX
//see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $i, 2);
++$i;
break;
case ($ordChrsC & 0xF0) == 0xE0:
// characters U-00000800 - U-0000FFFF, mask 1110XXXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $i, 3);
$i += 2;
break;
case ($ordChrsC & 0xF8) == 0xF0:
// characters U-00010000 - U-001FFFFF, mask 11110XXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $i, 4);
$i += 3;
break;
case ($ordChrsC & 0xFC) == 0xF8:
// characters U-00200000 - U-03FFFFFF, mask 111110XX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $i, 5);
$i += 4;
break;
case ($ordChrsC & 0xFE) == 0xFC:
// characters U-04000000 - U-7FFFFFFF, mask 1111110X
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $i, 6);
$i += 5;
break;
}
}

return $utf8;
}

/**
* Constructor
*
Expand Down Expand Up @@ -436,79 +509,6 @@ protected function _getNextToken()
return $this->token;
}

/**
* Decode Unicode Characters from \u0000 ASCII syntax.
*
* This algorithm was originally developed for the
* Solar Framework by Paul M. Jones
*
* @link http://solarphp.com/
* @link https://github.com/solarphp/core/blob/master/Solar/Json.php
* @param string $chrs
* @return string
*/
public static function decodeUnicodeString($chrs)
{
$chrs = (string) $chrs;
$utf8 = '';
$strlenChrs = strlen($chrs);

for ($i = 0; $i < $strlenChrs; $i++) {
$ordChrsC = ord($chrs[$i]);

switch (true) {
case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $i, 6)):
// single, escaped unicode character
$utf16 = chr(hexdec(substr($chrs, ($i + 2), 2)))
. chr(hexdec(substr($chrs, ($i + 4), 2)));
$utf8char = self::_utf162utf8($utf16);
$search = array('\\', "\n", "\t", "\r", chr(0x08), chr(0x0C), '"', '\'', '/');
if (in_array($utf8char, $search)) {
$replace = array('\\\\', '\\n', '\\t', '\\r', '\\b', '\\f', '\\"', '\\\'', '\\/');
$utf8char = str_replace($search, $replace, $utf8char);
}
$utf8 .= $utf8char;
$i += 5;
break;
case ($ordChrsC >= 0x20) && ($ordChrsC <= 0x7F):
$utf8 .= $chrs{$i};
break;
case ($ordChrsC & 0xE0) == 0xC0:
// characters U-00000080 - U-000007FF, mask 110XXXXX
//see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $i, 2);
++$i;
break;
case ($ordChrsC & 0xF0) == 0xE0:
// characters U-00000800 - U-0000FFFF, mask 1110XXXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $i, 3);
$i += 2;
break;
case ($ordChrsC & 0xF8) == 0xF0:
// characters U-00010000 - U-001FFFFF, mask 11110XXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $i, 4);
$i += 3;
break;
case ($ordChrsC & 0xFC) == 0xF8:
// characters U-00200000 - U-03FFFFFF, mask 111110XX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $i, 5);
$i += 4;
break;
case ($ordChrsC & 0xFE) == 0xFC:
// characters U-04000000 - U-7FFFFFFF, mask 1111110X
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $i, 6);
$i += 5;
break;
}
}

return $utf8;
}

/**
* Convert a string from one UTF-16 char to one UTF-8 char.
*
Expand Down

0 comments on commit 5012195

Please sign in to comment.