You are here

function Services_JSON::utf82utf16 in Album Photos 6.2

convert a string from one UTF-8 char to one UTF-16 char

Normally should be handled by mb_convert_encoding, but provides a slower PHP-only method for installations that lack the multibye string extension.

@access private

Parameters

string $utf8 UTF-8 character:

Return value

string UTF-16 character

1 call to Services_JSON::utf82utf16()
Services_JSON::encode in php/json-php4.php
encodes an arbitrary variable into JSON format

File

php/json-php4.php, line 192

Class

Services_JSON
Converts to and from JSON format.

Code

function utf82utf16($utf8) {

  // oh please oh please oh please oh please oh please
  if (function_exists('mb_convert_encoding')) {
    return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8');
  }
  switch (strlen($utf8)) {
    case 1:

      // this case should never be reached, because we are in ASCII range
      // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
      return $utf8;
    case 2:

      // return a UTF-16 character from a 2-byte UTF-8 char
      // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
      return chr(0x7 & ord($utf8[0]) >> 2) . chr(0xc0 & ord($utf8[0]) << 6 | 0x3f & ord($utf8[1]));
    case 3:

      // return a UTF-16 character from a 3-byte UTF-8 char
      // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
      return chr(0xf0 & ord($utf8[0]) << 4 | 0xf & ord($utf8[1]) >> 2) . chr(0xc0 & ord($utf8[1]) << 6 | 0x7f & ord($utf8[2]));
  }

  // ignoring UTF-32 for now, sorry
  return '';
}