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

Commit

Permalink
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 38 deletions.
45 changes: 21 additions & 24 deletions src/Decoder.php
Original file line number Diff line number Diff line change
Expand Up @@ -302,10 +302,10 @@ protected function _getNextToken()
return(self::EOF);
}

$str = $this->source;
$str_length = $this->sourceLength;
$i = $this->offset;
$start = $i;
$str = $this->source;
$strLength = $this->sourceLength;
$i = $this->offset;
$start = $i;

switch ($str{$i}) {
case '{':
Expand All @@ -330,15 +330,15 @@ protected function _getNextToken()
$result = '';
do {
$i++;
if ($i >= $str_length) {
if ($i >= $strLength) {
break;
}

$chr = $str{$i};

if ($chr == '\\') {
$i++;
if ($i >= $str_length) {
if ($i >= $strLength) {
break;
}
$chr = $str{$i};
Expand Down Expand Up @@ -378,28 +378,28 @@ protected function _getNextToken()
} else {
$result .= $chr;
}
} while ($i < $str_length);
} while ($i < $strLength);

$this->token = self::DATUM;
//$this->tokenValue = substr($str, $start + 1, $i - $start - 1);
$this->tokenValue = $result;
break;
case 't':
if (($i+ 3) < $str_length && substr($str, $start, 4) == "true") {
if (($i+ 3) < $strLength && substr($str, $start, 4) == "true") {
$this->token = self::DATUM;
}
$this->tokenValue = true;
$i += 3;
break;
case 'f':
if (($i+ 4) < $str_length && substr($str, $start, 5) == "false") {
if (($i+ 4) < $strLength && substr($str, $start, 5) == "false") {
$this->token = self::DATUM;
}
$this->tokenValue = false;
$i += 4;
break;
case 'n':
if (($i+ 3) < $str_length && substr($str, $start, 4) == "null") {
if (($i+ 3) < $strLength && substr($str, $start, 4) == "null") {
$this->token = self::DATUM;
}
$this->tokenValue = NULL;
Expand Down Expand Up @@ -454,15 +454,12 @@ protected function _getNextToken()
*/
public static function decodeUnicodeString($chrs)
{
$chrs = (string) $chrs;
$delim = substr($chrs, 0, 1);
$utf8 = '';
$strlen_chrs = strlen($chrs);
$chrs = (string) $chrs;
$utf8 = '';
$strlenChrs = strlen($chrs);

for ($i = 0; $i < $strlen_chrs; $i++) {

$substr_chrs_c_2 = substr($chrs, $i, 2);
$ord_chrs_c = ord($chrs[$i]);
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)):
Expand All @@ -478,34 +475,34 @@ public static function decodeUnicodeString($chrs)
$utf8 .= $utf8char;
$i += 5;
break;
case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F):
case ($ordChrsC >= 0x20) && ($ordChrsC <= 0x7F):
$utf8 .= $chrs{$i};
break;
case ($ord_chrs_c & 0xE0) == 0xC0:
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 ($ord_chrs_c & 0xF0) == 0xE0:
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 ($ord_chrs_c & 0xF8) == 0xF0:
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 ($ord_chrs_c & 0xFC) == 0xF8:
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 ($ord_chrs_c & 0xFE) == 0xFC:
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);
Expand Down
28 changes: 14 additions & 14 deletions src/Encoder.php
Original file line number Diff line number Diff line change
Expand Up @@ -446,46 +446,46 @@ public static function encodeClasses(array $classNames, $package = '')
*/
public static function encodeUnicodeString($value)
{
$strlen_var = strlen($value);
$strlenVar = strlen($value);
$ascii = "";

/**
* Iterate over every character in the string,
* escaping with a slash or encoding to UTF-8 where necessary
*/
for ($i = 0; $i < $strlen_var; $i++) {
$ord_var_c = ord($value[$i]);
for ($i = 0; $i < $strlenVar; $i++) {
$ordVarC = ord($value[$i]);

switch (true) {
case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
case (($ordVarC >= 0x20) && ($ordVarC <= 0x7F)):
// characters U-00000000 - U-0000007F (same as ASCII)
$ascii .= $value[$i];
break;

case (($ord_var_c & 0xE0) == 0xC0):
case (($ordVarC & 0xE0) == 0xC0):
// characters U-00000080 - U-000007FF, mask 110XXXXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c, ord($value[$i + 1]));
$char = pack('C*', $ordVarC, ord($value[$i + 1]));
$i += 1;
$utf16 = self::_utf82utf16($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;

case (($ord_var_c & 0xF0) == 0xE0):
case (($ordVarC & 0xF0) == 0xE0):
// characters U-00000800 - U-0000FFFF, mask 1110XXXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c,
$char = pack('C*', $ordVarC,
ord($value[$i + 1]),
ord($value[$i + 2]));
$i += 2;
$utf16 = self::_utf82utf16($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;

case (($ord_var_c & 0xF8) == 0xF0):
case (($ordVarC & 0xF8) == 0xF0):
// characters U-00010000 - U-001FFFFF, mask 11110XXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c,
$char = pack('C*', $ordVarC,
ord($value[$i + 1]),
ord($value[$i + 2]),
ord($value[$i + 3]));
Expand All @@ -494,10 +494,10 @@ public static function encodeUnicodeString($value)
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;

case (($ord_var_c & 0xFC) == 0xF8):
case (($ordVarC & 0xFC) == 0xF8):
// characters U-00200000 - U-03FFFFFF, mask 111110XX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c,
$char = pack('C*', $ordVarC,
ord($value[$i + 1]),
ord($value[$i + 2]),
ord($value[$i + 3]),
Expand All @@ -507,10 +507,10 @@ public static function encodeUnicodeString($value)
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;

case (($ord_var_c & 0xFE) == 0xFC):
case (($ordVarC & 0xFE) == 0xFC):
// characters U-04000000 - U-7FFFFFFF, mask 1111110X
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c,
$char = pack('C*', $ordVarC,
ord($value[$i + 1]),
ord($value[$i + 2]),
ord($value[$i + 3]),
Expand Down

0 comments on commit a4d12c0

Please sign in to comment.