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 == '' ? '' : "?=\r\n =?UTF-8?B?") . base64_encode(substr($str, $pos, $length + $adjust));
  251. $pos = $pos + $length + $adjust;
  252. }
  253. else
  254. {
  255. $buffer .= ($buffer == '' ? '' : "?=\r\n =?UTF-8?B?") . base64_encode(substr($str, $pos));
  256. $pos = $max;
  257. }
  258. }
  259.  
  260. return '=?UTF-8?B?' . $buffer . '?=';
  261. }
  262.  
  263. /**
  264.   * Send mail
  265.   * Replacement for mb_send_mail(), an UTF-8 friendly replacement for mail()
  266.   */
  267. public function sendMail($to, $subject, $message , $additional_headers = '', $additional_parameter = '')
  268. {
  269. $subject = $this->encodeMimeHeader($subject);
  270. $message = chunk_split(base64_encode($message));
  271.  
  272. $additional_headers = trim($additional_headers);
  273.  
  274. if ($additional_headers != '')
  275. $additional_headers .= "\r\n";
  276.  
  277. $additional_headers .=
  278. "Mime-Version: 1.0\r\n" .
  279. "Content-Type: text/plain; charset=UTF-8\r\n" .
  280. "Content-Transfer-Encoding: base64";
  281.  
  282. @mail($to, $subject, $message, $additional_headers, $additional_parameter);
  283. }
  284.  
  285. /**
  286.   * Prepare an UTF-8 string for use in JavaScript
  287.   */
  288. public function encodeJavaScript($string)
  289. {
  290. $string = str_replace ('\\', '\\\\', $string);
  291. $string = str_replace ('"', '\\"', $string);
  292. $string = str_replace ("'", "\\'", $string);
  293. $string = str_replace ("\n", "\\n", $string);
  294. $string = str_replace ("\r", "\\r", $string);
  295. $string = str_replace ("\t", "\\t", $string);
  296.  
  297. $len = strlen ($string);
  298. $pos = 0;
  299. $out = '';
  300.  
  301. while ($pos < $len)
  302. {
  303. $ascii = ord (substr ($string, $pos, 1));
  304.  
  305. if ($ascii >= 0xF0)
  306. {
  307. $byte[1] = ord(substr ($string, $pos, 1)) - 0xF0;
  308. $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
  309. $byte[3] = ord(substr ($string, $pos + 2, 1)) - 0x80;
  310. $byte[4] = ord(substr ($string, $pos + 3, 1)) - 0x80;
  311.  
  312. $char_code = ($byte[1] << 18) + ($byte[2] << 12) + ($byte[3] << 6) + $byte[4];
  313. $pos += 4;
  314. }
  315. elseif (($ascii >= 0xE0) && ($ascii < 0xF0))
  316. {
  317. $byte[1] = ord(substr ($string, $pos, 1)) - 0xE0;
  318. $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
  319. $byte[3] = ord(substr ($string, $pos + 2, 1)) - 0x80;
  320.  
  321. $char_code = ($byte[1] << 12) + ($byte[2] << 6) + $byte[3];
  322. $pos += 3;
  323. }
  324. elseif (($ascii >= 0xC0) && ($ascii < 0xE0))
  325. {
  326. $byte[1] = ord(substr ($string, $pos, 1)) - 0xC0;
  327. $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
  328.  
  329. $char_code = ($byte[1] << 6) + $byte[2];
  330. $pos += 2;
  331. }
  332. else
  333. {
  334. $char_code = ord(substr ($string, $pos, 1));
  335. $pos += 1;
  336. }
  337.  
  338. if ($char_code < 0x80)
  339. $out .= chr($char_code);
  340. else
  341. $out .= '\\u'. str_pad(dechex($char_code), 4, '0', STR_PAD_LEFT);
  342. }
  343.  
  344. return $out;
  345. }
  346.  
  347. /**
  348.   * Encode an UTF-8 string with numeric entities
  349.   * Simplied replacement for mb_encode_numericentity()
  350.   */
  351. public function encodeNumericEntity($string)
  352. {
  353. $len = strlen ($string);
  354. $pos = 0;
  355. $out = '';
  356.  
  357. while ($pos < $len)
  358. {
  359. $ascii = ord (substr ($string, $pos, 1));
  360.  
  361. if ($ascii >= 0xF0)
  362. {
  363. $byte[1] = ord(substr ($string, $pos, 1)) - 0xF0;
  364. $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
  365. $byte[3] = ord(substr ($string, $pos + 2, 1)) - 0x80;
  366. $byte[4] = ord(substr ($string, $pos + 3, 1)) - 0x80;
  367.  
  368. $char_code = ($byte[1] << 18) + ($byte[2] << 12) + ($byte[3] << 6) + $byte[4];
  369. $pos += 4;
  370. }
  371. elseif (($ascii >= 0xE0) && ($ascii < 0xF0))
  372. {
  373. $byte[1] = ord(substr ($string, $pos, 1)) - 0xE0;
  374. $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
  375. $byte[3] = ord(substr ($string, $pos + 2, 1)) - 0x80;
  376.  
  377. $char_code = ($byte[1] << 12) + ($byte[2] << 6) + $byte[3];
  378. $pos += 3;
  379. }
  380. elseif (($ascii >= 0xC0) && ($ascii < 0xE0))
  381. {
  382. $byte[1] = ord(substr ($string, $pos, 1)) - 0xC0;
  383. $byte[2] = ord(substr ($string, $pos + 1, 1)) - 0x80;
  384.  
  385. $char_code = ($byte[1] << 6) + $byte[2];
  386. $pos += 2;
  387. }
  388. else
  389. {
  390. $char_code = ord(substr ($string, $pos, 1));
  391. $pos += 1;
  392. }
  393.  
  394. if ($char_code < 0x80)
  395. $out .= chr($char_code);
  396. else
  397. $out .= '&#'. str_pad($char_code, 5, '0', STR_PAD_LEFT) . ';';
  398. }
  399.  
  400. return $out;
  401. }
  402.  
  403. private $_aUtf8TableUpper = array(
  404. "������¯������½���¯���¿���½" => "������¯������¼������º", "������¯������½���¯���¿���½" => "������¯������¼������¹", "������¯������½���¯���¿���½" => "������¯������¼������¸",
  405. "������¯������½���¯���¿���½" => "������¯������¼������·", "������¯������½���¯���¿���½" => "������¯������¼������¶", "������¯������½���¯���¿���½" => "������¯������¼������µ",
  406. "������¯������½���¯���¿���½" => "������¯������¼������´", "������¯������½���¯���¿���½" => "������¯������¼������³", "������¯������½���¯���¿���½" => "������¯������¼������²",
  407. "������¯������½���¯���¿���½" => "������¯������¼������±", "������¯������½���¯���¿���½" => "������¯������¼������°", "������¯������½���¯���¿���½" => "������¯������¼������¯",
  408. "������¯������½���¯���¿���½" => "������¯������¼������®", "������¯������½���¯���¿���½" => "������¯������¼������­", "������¯������½���¯���¿���½" => "������¯������¼������¬",
  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. "������¡������¹������¹" => "������¡������¹������¸", "������¡������¹������·" => "������¡������¹������¶", "�

Report this snippet  

You need to login to post a comment.