Posted By

phpdev on 01/24/13


Tagged

class php utf8 String utf encoding


Versions (?)

UTF8 Friendly


 / Published in: PHP
 

URL: https://gist.github.com/2481124

UTF8 Friendly PHP Class

  1. <?php
  2. /**
  3.   * @desc This program was amended by Pierre-Henry.
  4.   * @author Pierre-Henry Soria <[email protected]>
  5.   * @version 2.1.4 (Last update 2012/06/21).
  6.   *
  7.   *
  8.   * UTF-8 friendly replacement functions - v0.2
  9.   * Copyright (C) 2004-2006 Niels Leenheer & Andy Matsubara
  10.   *
  11.   * This program is free software; you can redistribute it and/or
  12.   * modify it under the terms of the GNU General Public License
  13.   * as published by the Free Software Foundation; either version 2
  14.   * of the License, or (at your option) any later version.
  15.   *
  16.   * Supported functions:
  17.   * - Utf8::convert()
  18.   * - Utf8::lower()
  19.   * - Utf8::upper()
  20.   * - Utf8::length()
  21.   * - Utf8::width()
  22.   * - Utf8::sub()
  23.   * - Utf8::width()
  24.   * - Utf8::cut()
  25.   * - Utf8::rightPosition()
  26.   * - Utf8::position()
  27.   * - Utf8::subCount()
  28.   * - Utf8::encodeMimeHeader()
  29.   * - Utf8::sendMail()
  30.   * - Utf8::encodeJavaScript()
  31.   * - Utf8::encodeNumericEntity()
  32.   *
  33.   */
  34.  
  35. namespace PHS\Str;
  36. defined('PHS') or exit('Restricted access');
  37.  
  38. final class Utf8
  39. {
  40.  
  41. /**
  42.   * Convert a foreign charset encoding to UTF-8
  43.   */
  44. public function convert($string, $encoding)
  45. {
  46. if (function_exists('iconv')) {
  47. return @iconv($encoding, 'UTF-8//IGNORE', $contents);
  48. }
  49.  
  50. if (function_exists('mb_convert_encoding')) {
  51. return @mb_convert_encoding($contents, 'UTF-8', $encoding );
  52. }
  53.  
  54. return $string;
  55. }
  56.  
  57. /**
  58.   * Determine the number of characters of a string
  59.   * Compatible with mb_strlen(), an UTF-8 friendly replacement for strlen()
  60.   */
  61. public function length($str)
  62. {
  63. return preg_match_all('/[\x01-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF][\x80-\xBF]/', $str, $arr);
  64. }
  65.  
  66. /**
  67.   * Count the number of substring occurances
  68.   * Compatible with mb_substr_count(), an UTF-8 friendly replacement for substr_count()
  69.   */
  70. public function subCount($haystack, $needle)
  71. {
  72. return substr_count($haystack, $needle);
  73. }
  74.  
  75. /**
  76.   * Return part of a string, length and offset in characters
  77.   * Compatible with mb_substr(), an UTF-8 friendly replacement for substr()
  78.   */
  79. public function sub($str, $start , $length = NULL)
  80. {
  81. preg_match_all('/[\x01-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF][\x80-\xBF]/', $str, $arr);
  82.  
  83. if (is_int($length))
  84. return implode('', array_slice($arr[0], $start, $length));
  85. else
  86. return implode('', array_slice($arr[0], $start));
  87. }
  88.  
  89. /**
  90.   * Return part of a string, length and offset in bytes
  91.   * Compatible with mb_strcut()
  92.   */
  93. public function cut($str, $start, $length = NULL)
  94. {
  95. if ($start < 0) $start += strlen($str);
  96.  
  97. $original = $start;
  98.  
  99. while ($start > 0 && intval(ord($str[$start]) & 0xC0) == 0x80)
  100. $start--;
  101.  
  102. $start = max($start, 0);
  103. $original = max($original, 0);
  104.  
  105. if ($start < strlen($str))
  106. {
  107. if (is_null($length)) {
  108. return substr($str, $start);
  109. }
  110. elseif ($length > 0) {
  111. $end = $start + $length;
  112.  
  113. while ($end > 0 && intval(ord($str[$end]) & 0xC0) == 0x80)
  114. $end--;
  115.  
  116. return substr($str, $start, $end - $start);
  117. }
  118. elseif ($length < 0) {
  119. $end = strlen($str) + $length - ($original - $start);
  120.  
  121. while ($end > 0 && intval(ord($str[$end]) & 0xC0) == 0x80)
  122. $end--;
  123.  
  124. if ($end > 0)
  125. return substr($str, $start, $end - $start);
  126. }
  127. }
  128.  
  129. return '';
  130. }
  131.  
  132. /**
  133.   * Determine the width of a string
  134.   * Compatible with mb_strwidth()
  135.   */
  136. public function width($str)
  137. {
  138. $double = preg_match_all('/[\xE2-\xEF][\x80-\xBF][\x80-\xBF]/', $str, $arr) - // U+2000 - U+FFFF = double width
  139. preg_match_all('/\xEF\xBD[\xA1-\xBF]|\xEF\xBE[\x80-\x9F]/', $str, $arr); // U+FF61 - U+FF9F = single width
  140. $null = preg_match_all('/[\x00-\x19]/', $str, $arr); // U+0000 - U+0019 = no width
  141.  
  142. return $this->length($str) - $null + $double;
  143. }
  144.  
  145. /**
  146.   * Get truncated string with specified width
  147.   * Compatible with mb_strimwidth()
  148.   */
  149. public function mWidth($str, $start, $width, $trimmarker = '')
  150. {
  151. $str = $this->sub($str, $start);
  152. $width = $width - $this->width($trimmarker);
  153.  
  154. for ($i = 0, $length = strlen($str); $i < $length; $i++)
  155. {
  156. $b1 = (int)ord($str[$i]);
  157.  
  158. if ($b1 < 0x80 || $b1 > 0xBF)
  159. {
  160. $c++;
  161.  
  162. if ($b1 > 0xE2)
  163. {
  164. $b2 = (int)ord($str[$i + 1]);
  165. $b3 = (int)ord($str[$i + 2]);
  166.  
  167. if (($b2 == 0xBD && $b3 >= 0xA1) || ($b2 == 0xBE && $b3 <= 0x9F))
  168. $count++;
  169. else
  170. $count = $count + 2;
  171. }
  172. else
  173. $count++;
  174. }
  175.  
  176. if ($count > $width) {
  177. return $this->sub($str, 0, $c - 1) . $trimmarker;
  178. }
  179. }
  180. }
  181.  
  182. /**
  183.   * Find position of last occurance of a string in another string
  184.   * Compatible with mb_strrpos(), an UTF-8 friendly replacement for strrpos()
  185.   */
  186. public function rightPosition($haystack, $needle)
  187. {
  188. $pos = strrpos($haystack, $needle);
  189.  
  190. if ($pos === false)
  191. return false;
  192. else
  193. return $this->length(substr($haystack, 0, $pos));
  194. }
  195.  
  196. /**
  197.   * Find position of first occurance of a string in another string
  198.   * Compatible with mb_strpos(), an UTF-8 friendly replacement for strpos()
  199.   */
  200. public function position($haystack, $needle, $offset = 0)
  201. {
  202. $comp = 0;
  203.  
  204. while (!isset($length) || $length < $offset)
  205. {
  206. $pos = strpos($haystack, $needle, $offset + $comp);
  207. if ($pos === false) return false;
  208. $length = utf_strlen(substr($haystack, 0, $pos));
  209. if ($length < $offset) $comp = $pos - $length;
  210. }
  211.  
  212. return $length;
  213. }
  214.  
  215. /**
  216.   * Convert a string to lower case
  217.   * Compatible with mb_strtolower(), an UTF-8 friendly replacement for strtolower()
  218.   */
  219. public function lower($str)
  220. {
  221. return strtr($str, $this->_aUtf8TableLower);
  222. }
  223.  
  224. /**
  225.   * Convert a string to upper case
  226.   * Compatible with mb_strtoupper(), an UTF-8 friendly replacement for strtoupper()
  227.   */
  228. public function upper($str)
  229. {
  230. return strtr($str, $this->_aUtf8TableUpper);
  231. }
  232.  
  233. /**
  234.   * Encode a string for use in a MIME header
  235.   * Simplied replacement for mb_encode_mimeheader()
  236.   */
  237. public function encodeMimeHeader($str)
  238. {
  239. $length = 45; $pos = 0; $max = strlen($str);
  240.  
  241. while ($pos < $max)
  242. {
  243. if ($pos + $length < $max)
  244. {
  245. $adjust = 0;
  246.  
  247. while (intval(ord($str[$pos + $length + $adjust]) & 0xC0) == 0x80)
  248. $adjust--;
  249.  
  250. $buffer .= ($buffer == '' ? '' : "?=
  251. =?UTF-8?B?") . base64_encode(substr($str, $pos, $length + $adjust));
  252. $pos = $pos + $length + $adjust;
  253. }
  254. else
  255. {
  256. $buffer .= ($buffer == '' ? '' : "?=
  257. =?UTF-8?B?") . base64_encode(substr($str, $pos));
  258. $pos = $max;
  259. }
  260. }
  261.  
  262. return '=?UTF-8?B?' . $buffer . '?=';
  263. }
  264.  
  265. /**
  266.   * Send mail
  267.   * Replacement for mb_send_mail(), an UTF-8 friendly replacement for mail()
  268.   */
  269. public function sendMail($to, $subject, $message , $additional_headers = '', $additional_parameter = '')
  270. {
  271. $subject = $this->encodeMimeHeader($subject);
  272. $message = chunk_split(base64_encode($message));
  273.  
  274. $additional_headers = trim($additional_headers);
  275.  
  276. if ($additional_headers != '')
  277. $additional_headers .= "
  278. ";
  279.  
  280. $additional_headers .=
  281. "Mime-Version: 1.0
  282. " .
  283. "Content-Type: text/plain; charset=UTF-8
  284. " .
  285. "Content-Transfer-Encoding: base64";
  286.  
  287. @mail($to, $subject, $message, $additional_headers, $additional_parameter);
  288. }
  289.  
  290. /**
  291.   * Prepare an UTF-8 string for use in JavaScript
  292.   */
  293. public function encodeJavaScript($string)
  294. {
  295. $string = str_replace ('\\', '\\\\', $string);
  296. $string = str_replace ('"', '\\"', $string);
  297. $string = str_replace ("'", "\\'", $string);
  298. $string = str_replace ("\n", "\\n", $string);
  299. $string = str_replace ("\r", "\\r", $string);
  300. $string = str_replace ("\t", "\\t", $string);
  301.  
  302. $len = strlen ($string);
  303. $pos = 0;
  304. $out = '';
  305.  
  306. while ($pos < $len)
  307. {
  308. $ascii = ord (substr ($string, $pos, 1));
  309.  
  310. if ($ascii >= 0xF0)
  311. {
  312. $byte[1] = ord(substr ($string, $pos, 1)) - 0xF0;
  313. $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
  314. $byte[3] = ord(substr ($string, $pos + 2, 1)) - 0x80;
  315. $byte[4] = ord(substr ($string, $pos + 3, 1)) - 0x80;
  316.  
  317. $char_code = ($byte[1] << 18) + ($byte[2] << 12) + ($byte[3] << 6) + $byte[4];
  318. $pos += 4;
  319. }
  320. elseif (($ascii >= 0xE0) && ($ascii < 0xF0))
  321. {
  322. $byte[1] = ord(substr ($string, $pos, 1)) - 0xE0;
  323. $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
  324. $byte[3] = ord(substr ($string, $pos + 2, 1)) - 0x80;
  325.  
  326. $char_code = ($byte[1] << 12) + ($byte[2] << 6) + $byte[3];
  327. $pos += 3;
  328. }
  329. elseif (($ascii >= 0xC0) && ($ascii < 0xE0))
  330. {
  331. $byte[1] = ord(substr ($string, $pos, 1)) - 0xC0;
  332. $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
  333.  
  334. $char_code = ($byte[1] << 6) + $byte[2];
  335. $pos += 2;
  336. }
  337. else
  338. {
  339. $char_code = ord(substr ($string, $pos, 1));
  340. $pos += 1;
  341. }
  342.  
  343. if ($char_code < 0x80)
  344. $out .= chr($char_code);
  345. else
  346. $out .= '\\u'. str_pad(dechex($char_code), 4, '0', STR_PAD_LEFT);
  347. }
  348.  
  349. return $out;
  350. }
  351.  
  352. /**
  353.   * Encode an UTF-8 string with numeric entities
  354.   * Simplied replacement for mb_encode_numericentity()
  355.   */
  356. public function encodeNumericEntity($string)
  357. {
  358. $len = strlen ($string);
  359. $pos = 0;
  360. $out = '';
  361.  
  362. while ($pos < $len)
  363. {
  364. $ascii = ord (substr ($string, $pos, 1));
  365.  
  366. if ($ascii >= 0xF0)
  367. {
  368. $byte[1] = ord(substr ($string, $pos, 1)) - 0xF0;
  369. $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
  370. $byte[3] = ord(substr ($string, $pos + 2, 1)) - 0x80;
  371. $byte[4] = ord(substr ($string, $pos + 3, 1)) - 0x80;
  372.  
  373. $char_code = ($byte[1] << 18) + ($byte[2] << 12) + ($byte[3] << 6) + $byte[4];
  374. $pos += 4;
  375. }
  376. elseif (($ascii >= 0xE0) && ($ascii < 0xF0))
  377. {
  378. $byte[1] = ord(substr ($string, $pos, 1)) - 0xE0;
  379. $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
  380. $byte[3] = ord(substr ($string, $pos + 2, 1)) - 0x80;
  381.  
  382. $char_code = ($byte[1] << 12) + ($byte[2] << 6) + $byte[3];
  383. $pos += 3;
  384. }
  385. elseif (($ascii >= 0xC0) && ($ascii < 0xE0))
  386. {
  387. $byte[1] = ord(substr ($string, $pos, 1)) - 0xC0;
  388. $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
  389.  
  390. $char_code = ($byte[1] << 6) + $byte[2];
  391. $pos += 2;
  392. }
  393. else
  394. {
  395. $char_code = ord(substr ($string, $pos, 1));
  396. $pos += 1;
  397. }
  398.  
  399. if ($char_code < 0x80)
  400. $out .= chr($char_code);
  401. else
  402. $out .= '&#'. str_pad($char_code, 5, '0', STR_PAD_LEFT) . ';';
  403. }
  404.  
  405. return $out;
  406. }
  407.  
  408. private $_aUtf8TableUpper = array(
  409. "������¯������½���¯���¿���½" => "������¯������¼������º", "������¯������½���¯���¿���½" => "������¯������¼������¹", "������¯������½���¯���¿���½" => "������¯������¼������¸",
  410. "������¯������½���¯���¿���½" => "������¯������¼������·", "������¯������½���¯���¿���½" => "������¯������¼������¶", "������¯������½���¯���¿���½" => "������¯������¼������µ",
  411. "������¯������½���¯���¿���½" => "������¯������¼������´", "������¯������½���¯���¿���½" => "������¯������¼������³", "������¯������½���¯���¿���½" => "������¯������¼������²",
  412. "������¯������½���¯���¿���½" => "������¯������¼������±", "������¯������½���¯���¿���½" => "������¯������¼������°", "������¯������½���¯���¿���½" => "������¯������¼������¯",
  413. "������¯������½���¯���¿���½" => "������¯������¼������®", "������¯������½���¯���¿���½" => "������¯������¼������­", "������¯������½���¯���¿���½" => "������¯������¼������¬",
  414. "������¯������½���¯���¿���½" => "������¯������¼������«", "������¯������½���¯���¿���½" => "������¯������¼������ª", "������¯������½���¯���¿���½" => "������¯������¼������©",
  415. "������¯������½���¯���¿���½" => "������¯������¼������¨", "������¯������½���¯���¿���½" => "������¯������¼������§", "������¯������½���¯���¿���½" => "������¯������¼������¦",
  416. "������¯������½���¯���¿���½" => "������¯������¼������¥", "������¯������½���¯���¿���½" => "������¯������¼������¤", "������¯������½���¯���¿���½" => "������¯������¼������£",
  417. "������¯������½���¯���¿���½" => "������¯������¼������¢", "������¯������½���¯���¿���½" => "������¯������¼������¡", "������¡������¿������³" => "������¡������¿������¼",
  418. "������¡������¿������¥" => "������¡������¿������¬", "������¡������¿������¡" => "������¡������¿������©", "������¯������¿������½ " => "������¡������¿������¨",
  419. "������¡������¿���¯���¿���½" => "������¡������¿���¯���¿���½", "������¡������¿���¯���¿���½" => "������¡������¿���¯���¿���½", "������¡������¿���¯���¿���½" => "������¡������¿���¯���¿���½",
  420. "����¯�¿�½������¹" => "����¯�¿�½���¯���¿���½", "������¡������¾������³" => "������¡������¾������¼", "������¡������¾������±" => "������¡������¾������¹",
  421. "������¡������¾������°" => "������¡������¾������¸", "������¡������¾������§" => "������¡������¾������¯", "������¡������¾������¦" => "������¡������¾������®",
  422. "������¡������¾������¥" => "������¡������¾������­", "������¡������¾������¤" => "������¡������¾������¬", "������¡������¾������£" => "������¡������¾������«",
  423. "������¡������¾������¢" => "������¡������¾������ª", "������¡������¾������¡" => "������¡������¾������©", "������¯������¿������½ " => "������¡������¾������¨",
  424. "������¡������¾���¯���¿���½" => "������¡������¾���¯���¿���½", "������¡������¾���¯���¿���½" => "������¡������¾���¯���¿���½", "������¡������¾���¯���¿���½" => "������¡������¾���¯���¿���½",
  425. "������¡������¾���¯���¿���½" => "������¡������¾���¯���¿���½", "������¡������¾���¯���¿���½" => "������¡������¾���¯���¿���½", "������¡������¾���¯���¿���½" => "������¡������¾���¯���¿���½",
  426. "������¡������¾���¯���¿���½" => "������¡������¾���¯���¿���½", "������¡������¾���¯���¿���½" => "������¡������¾���¯���¿���½", "������¡������¾���¯���¿���½" => "������¡������¾���¯���¿���½",
  427. "������¡������¾���¯���¿���½" => "������¡������¾���¯���¿���½", "������¡������¾���¯���¿���½" => "������¡������¾���¯���¿���½", "������¡������¾���¯���¿���½" => "������¡������¾���¯���¿���½",
  428. "������¡������¾���¯���¿���½" => "������¡������¾���¯���¿���½", "������¡������¾���¯���¿���½" => "������¡������¾���¯���¿���½", "������¡������¾���¯���¿���½" => "������¡������¾���¯���¿���½",
  429. "������¡������¾���¯���¿���½" => "������¡������¾���¯���¿���½", "����¯�¿�½���¯���¿���½" => "����¯�¿�½���¯���¿���½", "������¡������½������¼" => "������¡������¿������º",
  430. "����¯�¿�½���¯���¿���½" => "����¯�¿�½���¯���¿���½", "������¡������½������º" => "������¡������¿������ª", "����¯�¿�½���¯���¿���½" => "����¯�¿�½���¯���¿���½",
  431. "������¡������½������¸" => "������¡������¿������¸", "����¯�¿�½������¯" => "����¯�¿�½���¯���¿���½", "������¡������½������¶" => "������¡������¿���¯���¿���½",
  432. "����¯�¿�½������®" => "����¯�¿�½���¯���¿���½", "������¡������½������´" => "������¡������¿���¯���¿���½", "����¯�¿�½������­" => "����¯�¿�½���¯���¿���½",
  433. "������¡������½������²" => "������¡������¿���¯���¿���½", "����¯�¿�½������¬" => "����¯�¿�½���¯���¿���½", "������¡������½������°" => "������¡������¾������º",
  434. "������¡������½������§" => "������¡������½������¯", "������¡������½������¦" => "������¡������½������®", "������¡������½������¥" => "������¡������½������­",
  435. "������¡������½������¤" => "������¡������½������¬", "������¡������½������£" => "������¡������½������«", "������¡������½������¢" => "������¡������½������ª",
  436. "������¡������½������¡" => "������¡������½������©", "������¯������¿������½ " => "������¡������½������¨", "������¡������½���¯���¿���½" => "������¡������½���¯���¿���½",
  437. "������¡������½���¯���¿���½" => "������¡������½���¯���¿���½", "������¡������½���¯���¿���½" => "������¡������½���¯���¿���½", "������¡������½���¯���¿���½" => "������¡������½���¯���¿���½",
  438. "������¡������½���¯���¿���½" => "������¡������½���¯���¿���½", "������¡������½���¯���¿���½" => "������¡������½���¯���¿���½", "������¡������½���¯���¿���½" => "������¡������½���¯���¿���½",
  439. "������¡������½���¯���¿���½" => "������¡������½���¯���¿���½", "������¡������½���¯���¿���½" => "������¡������½���¯���¿���½", "������¡������½���¯���¿���½" => "������¡������½���¯���¿���½",
  440. "������¡������¼������·" => "������¡������¼������¿", "������¡������¼������¶" => "������¡������¼������¾", "������¡������¼������µ" => "������¡������¼������½",
  441. "������¡������¼������´" => "������¡������¼������¼", "������¡������¼������³" => "������¡������¼������»", "������¡������¼������²" => "������¡������¼������º",
  442. "������¡������¼������±" => "������¡������¼������¹", "������¡������¼������°" => "������¡������¼������¸", "������¡������¼������§" => "������¡������¼������¯",
  443. "������¡������¼������¦" => "������¡������¼������®", "������¡������¼������¥" => "������¡������¼������­", "������¡������¼������¤" => "������¡������¼������¬",
  444. "������¡������¼������£" => "������¡������¼������«", "������¡������¼������¢" => "������¡������¼������ª", "������¡������¼������¡" => "������¡������¼������©",
  445. "������¯������¿������½ " => "������¡������¼������¨", "������¡������¼���¯���¿���½" => "������¡������¼���¯���¿���½", "������¡������¼���¯���¿���½" => "������¡������¼���¯���¿���½",
  446. "������¡������¼���¯���¿���½" => "������¡������¼���¯���¿���½", "������¡������¼���¯���¿���½" => "������¡������¼���¯���¿���½", "������¡������¼���¯���¿���½" => "������¡������¼���¯���¿���½",
  447. "������¡������¼���¯���¿���½" => "������¡������¼���¯���¿���½", "������¡������¼���¯���¿���½" => "������¡������¼���¯���¿���½", "������¡������¼���¯���¿���½" => "������¡������¼���¯���¿���½",
  448. "������¡������¼���¯���¿���½" => "������¡������¼���¯���¿���½", "������¡������¼���¯���¿���½" => "������¡������¼���¯���¿���½", "������¡������¼���¯���¿���½" => "������¡������¼���¯���¿���½",
  449. "������¡������¼���¯���¿���½" => "������¡������¼���¯���¿���½", "������¡������¼���¯���¿���½" => "������¡������¼���¯���¿���½", "������¡������¼���¯���¿���½" => "������¡������¼���¯���¿���½",
  450. "������¡������»������¹" => "������¡������»������¸", "������¡������»������·" => "������¡������»������¶", "������¡������»������µ" => "������¡������»������´",
  451. "������¡������»������³" => "������¡������»������²", "������¡������»������±" => "������¡������»������°", "������¡������»������¯" => "������¡������»������®",
  452. "������¡������»������­" => "������¡������»������¬", "������¡������»������«" => "������¡������»������ª", "������¡������»������©" => "������¡������»������¨",
  453. "������¡������»������§" => "������¡������»������¦", "������¡������»������¥" => "������¡������»������¤", "������¡������»������£" => "������¡������»������¢",
  454. "������¡������»������¡" => "������¯������¿������½ ", "������¡������»���¯���¿���½" => "������¡������»���¯���¿���½", "������¡������»���¯���¿���½" => "������¡������»���¯���¿���½",
  455. "������¡������»���¯���¿���½" => "������¡������»���¯���¿���½", "������¡������»���¯���¿���½" => "������¡������»���¯���¿���½", "������¡������»���¯���¿���½" => "������¡������»���¯���¿���½",
  456. "������¡������»���¯���¿���½" => "������¡������»���¯���¿���½", "������¡������»���¯���¿���½" => "������¡������»���¯���¿���½", "������¡������»���¯���¿���½" => "������¡������»���¯���¿���½",
  457. "������¡������»���¯���¿���½" => "������¡������»���¯���¿���½", "������¡������»���¯���¿���½" => "������¡������»���¯���¿���½", "������¡������»���¯���¿���½" => "������¡������»���¯���¿���½",
  458. "������¡������»���¯���¿���½" => "������¡������»���¯���¿���½", "������¡������»���¯���¿���½" => "������¡������»���¯���¿���½", "������¡������»���¯���¿���½" => "������¡������»���¯���¿���½",
  459. "������¡������»���¯���¿���½" => "������¡������»���¯���¿���½", "������¡������»���¯���¿���½" => "������¡������»���¯���¿���½", "������¡������º������¿" => "������¡������º������¾",
  460. "������¡������º������½" => "������¡������º������¼", "������¡������º������»" => "������¡������º������º", "������¡������º������¹" => "������¡������º������¸",
  461. "������¡������º������·" => "������¡������º������¶", "������¡������º������µ" => "������¡������º������´", "������¡������º������³" => "������¡������º������²",
  462. "������¡������º������±" => "������¡������º������°", "������¡������º������¯" => "������¡������º������®", "������¡������º������­" => "������¡������º������¬",
  463. "������¡������º������«" => "������¡������º������ª", "������¡������º������©" => "������¡������º������¨", "������¡������º������§" => "������¡������º������¦",
  464. "������¡������º������¥" => "������¡������º������¤", "������¡������º������£" => "������¡������º������¢", "������¡������º������¡" => "������¯������¿������½ ",
  465. "������¡������º���¯���¿���½" => "������¯������¿������½ ", "������¡������º���¯���¿���½" => "������¡������º���¯���¿���½", "������¡������º���¯���¿���½" => "������¡������º���¯���¿���½",
  466. "������¡������º���¯���¿���½" => "������¡������º���¯���¿���½", "������¡������º���¯���¿���½" => "������¡������º���¯���¿���½", "������¡������º���¯���¿���½" => "������¡������º���¯���¿���½",
  467. "������¡������º���¯���¿���½" => "������¡������º���¯���¿���½", "������¡������º���¯���¿���½" => "������¡������º���¯���¿���½", "������¡������º���¯���¿���½" => "������¡������º���¯���¿���½",
  468. "������¡������º���¯���¿���½" => "������¡������º���¯���¿���½", "������¡������º���¯���¿���½" => "������¡������º���¯���¿���½", "������¡������º���¯���¿���½" => "������¡������º���¯���¿���½",
  469. "������¡������¹������¿" => "������¡������¹������¾", "������¡������¹������½" => "������¡������¹������¼", "������¡������¹������»" => "������¡������¹������º",
  470. "������¡������¹������¹" => "������¡������¹������¸", "������¡������¹������·" => "������¡������¹������¶", "�

Report this snippet  

You need to login to post a comment.