OSDN Git Service

FIX:変数名の誤記を修正
[nucleus-jp/nucleus-next.git] / nucleus / libs / ENTITY.php
1 <?php\r
2 \r
3 class Entity\r
4 {\r
5         /**\r
6          * Entity::hen\r
7          * htmlentities wrapper\r
8          * \r
9          * @static\r
10          * @access public\r
11          * @param       string  $string target string\r
12          * @param       string  $quotation      quotation mode. please refer to the argument of PHP built-in htmlentities\r
13          * @return      string  escaped string\r
14          */\r
15         static public function hen($string, $quotation=ENT_QUOTES)\r
16         {\r
17                 /*\r
18                  * we can use 'double_encode' flag instead of this when dropping supports for PHP 5.2.2 or lower\r
19                  */\r
20                 $string = html_entity_decode($string, $quotation, i18n::get_current_charset());\r
21                 return (string) htmlentities($string, $quotation, i18n::get_current_charset());\r
22         }\r
23         \r
24         /**\r
25          * Entity::hsc\r
26          * htmlspecialchars wrapper\r
27          * \r
28          * NOTE: htmlspecialchars_decode() is ASCII-to-ACII conversion\r
29          *  and its target string consists of several letters.\r
30          *   There are no problems.\r
31          * \r
32          * @static\r
33          * @access public\r
34          * @param       string  $string target string\r
35          * @param       string  $quotation      quotation mode. please refer to the argument of PHP built-in htmlspecialchars\r
36          * @return      string  escaped string\r
37          * \r
38          */\r
39         static public function hsc($string, $quotation=ENT_QUOTES)\r
40         {\r
41                 /*\r
42                  * we can use 'double_encode' flag instead of this when dropping supports for PHP 5.2.2 or lower\r
43                  */\r
44                 $string = htmlspecialchars_decode($string, $quotation);\r
45                 return (string) htmlspecialchars($string, $quotation, i18n::get_current_charset());\r
46         }\r
47         \r
48         /**\r
49          * Entity::strip_tags()\r
50          * Strip HTML tags from a string\r
51          * \r
52          * This function is a bit more intelligent than a regular call to strip_tags(),\r
53          * because it also deletes the contents of certain tags and cleans up any\r
54          * unneeded whitespace.\r
55          * \r
56          * @static\r
57          * @param       String  $string target string\r
58          * @return      String  string with stripped tags\r
59          */\r
60         static public function strip_tags($string)\r
61         {\r
62                 $string = preg_replace("#<del[^>]*>.+<\/del[^>]*>#isU", '', $string);\r
63                 $string = preg_replace("#<script[^>]*>.+<\/script[^>]*>#isU", '', $string);\r
64                 $string = preg_replace("#<style[^>]*>.+<\/style[^>]*>#isU", '', $string);\r
65                 $string = preg_replace('#>#', '> ', $string);\r
66                 $string = preg_replace('#<#', ' <', $string);\r
67                 $string = strip_tags($string);\r
68                 $string = preg_replace("#\s+#", " ", $string);\r
69                 $string = trim($string);\r
70                 return $string;\r
71         }\r
72         \r
73         /**\r
74          * shortens a text string to maxlength.\r
75          * $suffix is what needs to be added at the end (end length is <= $maxlength)\r
76          *\r
77          * The purpose is to limit the width of string for rendered screen in web browser.\r
78          * So it depends on style sheet, browser's rendering scheme, client's system font.\r
79          *\r
80          * NOTE: In general, non-Latin font such as Japanese, Chinese, Cyrillic have two times as width as Latin fonts,\r
81          *  but this is not always correct, for example, rendered by proportional font.\r
82          *\r
83          * @static\r
84          * @param string $escaped_string target string\r
85          * @param integer $maxlength maximum length of return string which includes suffix\r
86          * @param string $suffix added in the end of shortened-string\r
87          * @return string\r
88          */\r
89         static public function shorten($string, $maxlength, $suffix)\r
90         {\r
91                 static $flag;\r
92                 \r
93                 $decoded_entities_pcre = array();\r
94                 $encoded_entities = array();\r
95                 \r
96                 /* 1. store html entities */\r
97                 preg_match('#&[^&]+?;#', $string, $encoded_entities);\r
98                 if ( !$encoded_entities )\r
99                 {\r
100                         $flag = FALSE;\r
101                 }\r
102                 else\r
103                 {\r
104                         $flag = TRUE;\r
105                 }\r
106                 if ( $flag )\r
107                 {\r
108                         foreach ( $encoded_entities as $encoded_entity )\r
109                         {\r
110                                 $decoded_entities_pcre[] = '#' . html_entity_decode($encoded_entity, ENT_QUOTES, i18n::get_current_charset()) . '#';\r
111                         }\r
112                 }\r
113                 \r
114                 /* 2. decode string */\r
115                 $string = html_entity_decode($string, ENT_QUOTES, i18n::get_current_charset());\r
116                 \r
117                 /* 3. shorten string and add suffix if string length is longer */\r
118                 if ( i18n::strlen($string) > $maxlength - i18n::strlen($suffix) )\r
119                 {\r
120                         $string = i18n::substr($string, 0, $maxlength - i18n::strlen($suffix) );\r
121                         $string .= $suffix;\r
122                 }\r
123                 \r
124                 /* 4. recover entities */\r
125                 if ( $flag )\r
126                 {\r
127                         $string = preg_replace($decoded_entities_pcre, $encoded_entities, $string);\r
128                 }\r
129                 \r
130                 return $string;\r
131         }\r
132         \r
133         /**\r
134          * Entity::highlight()\r
135          * highlights a specific query in a given HTML text (not within HTML tags)\r
136          * \r
137          * @static\r
138          * @param       string $text text to be highlighted\r
139          * @param       string $expression regular expression to be matched (can be an array of expressions as well)\r
140          * @param       string $highlight highlight to be used (use \\0 to indicate the matched expression)\r
141          * @return      string\r
142          */\r
143         static public function highlight($text, $expression, $highlight)\r
144         {\r
145                 if ( !$highlight || !$expression )\r
146                 {\r
147                         return $text;\r
148                 }\r
149                 \r
150                 if ( is_array($expression) && (count($expression) == 0) )\r
151                 {\r
152                         return $text;\r
153                 }\r
154                 \r
155                 $text = "<!--h-->{$text}";\r
156                 preg_match_all('#(<[^>]+>)([^<>]*)#', $text, $matches);\r
157                 $result = '';\r
158                 $count = count($matches[2]);\r
159                 \r
160                 for ( $i = 0; $i < $count; $i++ )\r
161                 {\r
162                         if ( $i != 0 )\r
163                         {\r
164                                 $result .= $matches[1][$i];\r
165                         }\r
166                         \r
167                         if ( is_array($expression) )\r
168                         {\r
169                                 foreach ( $expression as $regex )\r
170                                 {\r
171                                                 $matches[2][$i] = preg_replace("#{$regex}#i", $highlight, $matches[2][$i]);\r
172                                 }\r
173                                 $result .= $matches[2][$i];\r
174                         }\r
175                         else\r
176                         {\r
177                                 $result .= preg_replace("#{$expression}#i", $highlight, $matches[2][$i]);\r
178                         }\r
179                 }\r
180                 return $result;\r
181         }\r
182         \r
183         /**\r
184          * Entity::anchor_footnoting()\r
185          * change strings with footnoticing generated from anchor elements\r
186          * \r
187          * @static\r
188          * @param       String  $string strings which includes html elements\r
189          * @return      String  string with footnotes\r
190          */\r
191         static public function anchor_footnoting($string)\r
192         {\r
193                 /* 1. detect anchor elements */\r
194                 $anchors = array();\r
195                 if ( !preg_match_all("#<a[^>]*href=[\"\']([^\"^']*)[\"\'][^>]*>([^<]*)<\/a>#i", $subject, $anchors) )\r
196                 {\r
197                         return $string;\r
198                 }\r
199                 \r
200                 /* 2. add footnotes */\r
201                 $string .= "\n\n";\r
202                 $count = 1;\r
203                 foreach ( $anchors as $anchor )\r
204                 {\r
205                         preg_replace("#{$anchor[0]}#", "{$anchor[2]} [{$count}] ", $subject);\r
206                         $subject .= "[{$count}] {$anchor[1]}\n";\r
207                         $count++;\r
208                 }\r
209                 \r
210                 return strip_tags($ascii);\r
211         }\r
212         \r
213         /*\r
214          * NOTE: Obsoleted functions\r
215          */\r
216         \r
217         /**\r
218          * Entity::named_to_numeric()\r
219          * \r
220          * @deprecated\r
221          * @param String $string\r
222          */\r
223         function named_to_numeric ($string)\r
224         {\r
225                 $string = preg_replace('/(&[0-9A-Za-z]+)(;?\=?|([^A-Za-z0-9\;\:\.\-\_]))/e', "Entity::_named('\\1', '\\2') . '\\3'", $string);\r
226                 return $string;\r
227         }\r
228         \r
229         /**\r
230          * Entity::named_to_numeric()\r
231          * \r
232          * @deprecated\r
233          * @param String $string\r
234          */\r
235         function normalize_numeric ($string) {\r
236                 $string = preg_replace('/&#([0-9]+)(;)?/e', "'&#x'.dechex('\\1').';'", $string);\r
237                 $string = preg_replace('/&#[Xx](0)*([0-9A-Fa-f]+)(;?|([^A-Za-z0-9\;\:\.\-\_]))/e', "'&#x' . strtoupper('\\2') . ';\\4'", $string);\r
238                 $string = strtr($string, self::$entities['Windows-1252']);\r
239                 return $string;\r
240         }\r
241         \r
242         /**\r
243          * Entity::numeric_to_utf8()\r
244          * \r
245          * @deprecated\r
246          * @param String $string\r
247          */\r
248         function numeric_to_utf8 ($string) {\r
249                 $string = preg_replace('/&#([0-9]+)(;)?/e', "'&#x'.dechex('\\1').';'", $string);\r
250                 $string = preg_replace('/&#[Xx](0)*([0-9A-Fa-f]+)(;?|([^A-Za-z0-9\;\:\.\-\_]))/e', "'&#x' . strtoupper('\\2') . ';\\4'", $string);\r
251                 $string = preg_replace('/&#x([0-9A-Fa-f]+);/e', "Entity::_hex_to_utf8('\\1')", $string);                \r
252                 return $string;         \r
253         }\r
254         \r
255         /**\r
256          * Entity::numeric_to_named()\r
257          * convert decimal and hexadecimal numeric character references into named character references\r
258          * \r
259          * @deprecated\r
260          * @param String $string\r
261          */\r
262         function numeric_to_named ($string)\r
263         {\r
264                 $string = preg_replace('/&#[Xx]([0-9A-Fa-f]+)/e', "'&#'.hexdec('\\1')", $string);\r
265                 $string = strtr($string, array_flip(self::$entities['named_to_numeric']));\r
266                 return $string; \r
267         }\r
268         \r
269         /**\r
270          * Entity::specialchars()\r
271          * convert HTML entities to named character reference\r
272          * \r
273          * @deprecated\r
274          * @param String $string\r
275          */\r
276         function specialchars ($string, $type = 'xml')\r
277         {\r
278                 $specialchars = array(\r
279                         '"'             => '&quot;',\r
280                         '&'             => '&amp;',\r
281                         '<'             => '&lt;',\r
282                         '>'             => '&gt;'\r
283                 );\r
284                 if ( $type != 'xml' )\r
285                 {\r
286                         $specialchars["'"] = '&#39;';\r
287                 }\r
288                 else\r
289                 {\r
290                         $specialchars["'"] = '&apos;';\r
291                 }\r
292                 \r
293                 $string = preg_replace('/&(#?[Xx]?[0-9A-Za-z]+);/', "[[[ENTITY:\\1]]]", $string);\r
294                 $string = strtr($string, $specialchars);\r
295                 $string = preg_replace('/\[\[\[ENTITY\:([^\]]+)\]\]\]/', "&\\1;", $string);             \r
296                 return $string;\r
297         }\r
298         \r
299         /**\r
300          * Entity::_hex_to_utf8()\r
301          * convert decimal numeric character references to hexadecimal numeric character references\r
302          * \r
303          * @deprecated\r
304          * @param String $string\r
305          */\r
306         function _hex_to_utf8($s)\r
307         {\r
308                 $c = hexdec($s);\r
309                 \r
310                 if ( $c < 0x80 )\r
311                 {\r
312                         $str = chr($c);\r
313                 }\r
314                 else if ( $c < 0x800 )\r
315                 {\r
316                         $str = chr(0xC0 | $c>>6) . chr(0x80 | $c & 0x3F);\r
317                 }\r
318                 else if ( $c < 0x10000 )\r
319                 {\r
320                         $str = chr(0xE0 | $c>>12) . chr(0x80 | $c>>6 & 0x3F) . chr(0x80 | $c & 0x3F);\r
321                 }\r
322                 else if ( $c < 0x200000 )\r
323                 {\r
324                         $str = chr(0xF0 | $c>>18) . chr(0x80 | $c>>12 & 0x3F) . chr(0x80 | $c>>6 & 0x3F) . chr(0x80 | $c & 0x3F);\r
325                 }\r
326                 return $str;\r
327         }\r
328         \r
329         /**\r
330          * Entity::_named()\r
331          * convert entities to named character reference\r
332          * \r
333          * @deprecated\r
334          * @param String $string\r
335          * @param       String  $extra\r
336          * @return      \r
337          */\r
338         function _named($entity, $extra)\r
339         {\r
340                 if ( $extra == '=' )\r
341                 {\r
342                         return $entity . '=';\r
343                 }\r
344                 \r
345                 $length = i18n::strlen($entity);\r
346                 \r
347                 while ( $length > 0 )\r
348                 {\r
349                         $check = i18n::substr($entity, 0, $length);\r
350                         if ( array_key_exists($check, self::$entities['named_to_numeric']) )\r
351                         {\r
352                                 return self::$entities['named_to_numeric'][$check] . ';' . i18n::substr($entity, $length);\r
353                         }\r
354                         $length--;\r
355                 }\r
356                 \r
357                 if ( $extra != ';' )\r
358                 {\r
359                         return $entity;\r
360                 }\r
361                 else\r
362                 {\r
363                         return "{$entity};";\r
364                 }\r
365         }\r
366         \r
367         /**\r
368          * ENTITIY::$entities\r
369          * \r
370          * HTML 4.01 Specification\r
371          * @link        http://www.w3.org/TR/html4/sgml/entities.html\r
372          * @see 24 Character entity references in HTML 4\r
373          * \r
374          * XHTML™ 1.0 The Extensible HyperText Markup Language (Second Edition)\r
375          *  A Reformulation of HTML 4 in XML 1.0\r
376          * @link        http://www.w3.org/TR/xhtml1/\r
377          * @see 4.12. Entity references as hex values\r
378          * @see C.16. The Named Character Reference &apos;\r
379          * \r
380          * @static\r
381          * @deprecated\r
382          */\r
383         static private $entities = array (\r
384                 'named_to_numeric' => array (\r
385                         '&nbsp' =>      '&#x00A0',\r
386                         '&iexcl'        =>      '&#x00A1',\r
387                         '&cent' =>      '&#x00A2',\r
388                         '&pound'        =>      '&#x00A3',\r
389                         '&curren'       =>      '&#x00A4',\r
390                         '&yen'          =>      '&#x00A5',\r
391                         '&brvbar'       =>      '&#x00A6',\r
392                         '&sect' =>      '&#x00A7',\r
393                         '&uml'          =>      '&#x00A8',\r
394                         '&copy' =>      '&#x00A9',\r
395                         '&ordf' =>      '&#x00AA',\r
396                         '&laquo'        =>      '&#x00AB',\r
397                         '&not'          =>      '&#x00AC',\r
398                         '&shy'          =>      '&#x00AD',\r
399                         '&reg'          =>      '&#x00AE',\r
400                         '&macr' =>      '&#x00AF',\r
401                         '&deg'          =>      '&#x00B0',\r
402                         '&plusmn'       =>      '&#x00B1',\r
403                         '&sup2' =>      '&#x00B2',\r
404                         '&sup3' =>      '&#x00B3',\r
405                         '&acute'        =>      '&#x00B4',\r
406                         '&micro'        =>      '&#x00B5',\r
407                         '&para' =>      '&#x00B6',\r
408                         '&middot'       =>      '&#x00B7',\r
409                         '&cedil'        =>      '&#x00B8',\r
410                         '&sup1' =>      '&#x00B9',\r
411                         '&ordm' =>      '&#x00BA',\r
412                         '&raquo'        =>      '&#x00BB',\r
413                         '&frac14'       =>      '&#x00BC',\r
414                         '&frac12'       =>      '&#x00BD',\r
415                         '&frac34'       =>      '&#x00BE',\r
416                         '&iquest'       =>      '&#x00BF',\r
417                         '&Agrave'       =>      '&#x00C0',\r
418                         '&Aacute'       =>      '&#x00C1',\r
419                         '&Acirc'        =>      '&#x00C2',\r
420                         '&Atilde'       =>      '&#x00C3',\r
421                         '&Auml' =>      '&#x00C4',\r
422                         '&Aring'        =>      '&#x00C5',\r
423                         '&AElig'        =>      '&#x00C6',\r
424                         '&Ccedil'       =>      '&#x00C7',\r
425                         '&Egrave'       =>      '&#x00C8',\r
426                         '&Eacute'       =>      '&#x00C9',\r
427                         '&Ecirc'        =>      '&#x00CA',\r
428                         '&Euml' =>      '&#x00CB',\r
429                         '&Igrave'       =>      '&#x00CC',\r
430                         '&Iacute'       =>      '&#x00CD',\r
431                         '&Icirc'        =>      '&#x00CE',\r
432                         '&Iuml' =>      '&#x00CF',\r
433                         '&ETH'          =>      '&#x00D0',\r
434                         '&Ntilde'       =>      '&#x00D1',\r
435                         '&Ograve'       =>      '&#x00D2',\r
436                         '&Oacute'       =>      '&#x00D3',\r
437                         '&Ocirc'        =>      '&#x00D4',\r
438                         '&Otilde'       =>      '&#x00D5',\r
439                         '&Ouml' =>      '&#x00D6',\r
440                         '&times'        =>      '&#x00D7',\r
441                         '&Oslash'       =>      '&#x00D8',\r
442                         '&Ugrave'       =>      '&#x00D9',\r
443                         '&Uacute'       =>      '&#x00DA',\r
444                         '&Ucirc'        =>      '&#x00DB',\r
445                         '&Uuml' =>      '&#x00DC',\r
446                         '&Yacute'       =>      '&#x00DD',\r
447                         '&THORN'        =>      '&#x00DE',\r
448                         '&szlig'        =>      '&#x00DF',\r
449                         '&agrave'       =>      '&#x00E0',\r
450                         '&aacute'       =>      '&#x00E1',\r
451                         '&acirc'        =>      '&#x00E2',\r
452                         '&atilde'       =>      '&#x00E3',\r
453                         '&auml' =>      '&#x00E4',\r
454                         '&aring'        =>      '&#x00E5',\r
455                         '&aelig'        =>      '&#x00E6',\r
456                         '&ccedil'       =>      '&#x00E7',\r
457                         '&egrave'       =>      '&#x00E8',\r
458                         '&eacute'       =>      '&#x00E9',\r
459                         '&ecirc'        =>      '&#x00EA',\r
460                         '&euml' =>      '&#x00EB',\r
461                         '&igrave'       =>      '&#x00EC',\r
462                         '&iacute'       =>      '&#x00ED',\r
463                         '&icirc'        =>      '&#x00EE',\r
464                         '&iuml' =>      '&#x00EF',\r
465                         '&eth'          =>      '&#x00F0',\r
466                         '&ntilde'       =>      '&#x00F1',\r
467                         '&ograve'       =>      '&#x00F2',\r
468                         '&oacute'       =>      '&#x00F3',\r
469                         '&ocirc'        =>      '&#x00F4',\r
470                         '&otilde'       =>      '&#x00F5',\r
471                         '&ouml' =>      '&#x00F6',\r
472                         '&divide'       =>      '&#x00F7',\r
473                         '&oslash'       =>      '&#x00F8',\r
474                         '&ugrave'       =>      '&#x00F9',\r
475                         '&uacute'       =>      '&#x00FA',\r
476                         '&ucirc'        =>      '&#x00FB',\r
477                         '&uuml' =>      '&#x00FC',\r
478                         '&yacute'       =>      '&#x00FD',\r
479                         '&thorn'        =>      '&#x00FE',\r
480                         '&yuml' =>      '&#x00FF',\r
481                         '&OElig'        =>      '&#x0152',\r
482                         '&oelig'        =>      '&#x00E5',\r
483                         '&Scaron'       =>      '&#x0160',\r
484                         '&scaron'       =>      '&#x0161',\r
485                         '&Yuml' =>      '&#x0178',\r
486                         '&circ' =>      '&#x02C6',\r
487                         '&tilde'        =>      '&#x02DC',\r
488                         '&esnp' =>      '&#x2002',\r
489                         '&emsp' =>      '&#x2003',\r
490                         '&thinsp'       =>      '&#x2009',\r
491                         '&zwnj' =>      '&#x200C',\r
492                         '&zwj'          =>      '&#x200D',\r
493                         '&lrm'          =>      '&#x200E',\r
494                         '&rlm'          =>      '&#x200F',\r
495                         '&ndash'        =>      '&#x2013',\r
496                         '&mdash'        =>      '&#x2014',\r
497                         '&lsquo'        =>      '&#x2018',\r
498                         '&rsquo'        =>      '&#x2019',\r
499                         '&sbquo'        =>      '&#x201A',\r
500                         '&ldquo'        =>      '&#x201C',\r
501                         '&rdquo'        =>      '&#x201D',\r
502                         '&bdquo'        =>      '&#x201E',\r
503                         '&dagger'       =>      '&#x2020',\r
504                         '&Dagger'       =>      '&#x2021',\r
505                         '&permil'       =>      '&#x2030',\r
506                         '&lsaquo'       =>      '&#x2039',\r
507                         '&rsaquo'       =>      '&#x203A',\r
508                         '&euro' =>      '&#x20AC',\r
509                         '&fnof' =>      '&#x0192',\r
510                         '&Alpha'        =>      '&#x0391',\r
511                         '&Beta' =>      '&#x0392',\r
512                         '&Gamma'        =>      '&#x0393',\r
513                         '&Delta'        =>      '&#x0394',\r
514                         '&Epsilon'      =>      '&#x0395',\r
515                         '&Zeta' =>      '&#x0396',\r
516                         '&Eta'          =>      '&#x0397',\r
517                         '&Theta'        =>      '&#x0398',\r
518                         '&Iota' =>      '&#x0399',\r
519                         '&Kappa'        =>      '&#x039A',\r
520                         '&Lambda'       =>      '&#x039B',\r
521                         '&Mu'           =>      '&#x039C',\r
522                         '&Nu'           =>      '&#x039D',\r
523                         '&Xi'           =>      '&#x039E',\r
524                         '&Omicron'      =>      '&#x039F',\r
525                         '&Pi'           =>      '&#x03A0',\r
526                         '&Rho'          =>      '&#x03A1',\r
527                         '&Sigma'        =>      '&#x03A3',\r
528                         '&Tau'          =>      '&#x03A4',\r
529                         '&Upsilon'      =>      '&#x03A5',\r
530                         '&Phi'          =>      '&#x03A6',\r
531                         '&Chi'          =>      '&#x03A7',\r
532                         '&Psi'          =>      '&#x03A8',\r
533                         '&Omega'        =>      '&#x03A9',\r
534                         '&alpha'        =>      '&#x03B1',\r
535                         '&beta' =>      '&#x03B2',\r
536                         '&gamma'        =>      '&#x03B3',\r
537                         '&delta'        =>      '&#x03B4',\r
538                         '&epsilon'      =>      '&#x03B5',\r
539                         '&zeta' =>      '&#x03B6',\r
540                         '&eta'          =>      '&#x03B7',\r
541                         '&theta'        =>      '&#x03B8',\r
542                         '&iota' =>      '&#x03B9',\r
543                         '&kappa'        =>      '&#x03BA',\r
544                         '&lambda'       =>      '&#x03BB',\r
545                         '&mu'           =>      '&#x03BC',\r
546                         '&nu'           =>      '&#x03BD',\r
547                         '&xi'           =>      '&#x03BE',\r
548                         '&omicron'      =>      '&#x03BF',\r
549                         '&pi'           =>      '&#x03C0',\r
550                         '&rho'          =>      '&#x03C1',\r
551                         '&sigmaf'       =>      '&#x03C2',\r
552                         '&sigma'        =>      '&#x03C3',\r
553                         '&tau'          =>      '&#x03C4',\r
554                         '&upsilon'      =>      '&#x03C5',\r
555                         '&phi'          =>      '&#x03C6',\r
556                         '&chi'          =>      '&#x03C7',\r
557                         '&psi'          =>      '&#x03C8',\r
558                         '&omega'        =>      '&#x03C9',\r
559                         '&thetasym'     =>      '&#x03D1',\r
560                         '&upsih'        =>      '&#x03D2',\r
561                         '&piv'          =>      '&#x03D6',\r
562                         '&bull' =>      '&#x2022',\r
563                         '&hellip'       =>      '&#x2026',\r
564                         '&prime'        =>      '&#x2032',\r
565                         '&Prime'        =>      '&#x2033',\r
566                         '&oline'        =>      '&#x203E',\r
567                         '&frasl'        =>      '&#x2044',\r
568                         '&weierp'       =>      '&#x2118',\r
569                         '&image'        =>      '&#x2111',\r
570                         '&real' =>      '&#x211C',\r
571                         '&trade'        =>      '&#x2112',\r
572                         '&alefsym'      =>      '&#x2135',\r
573                         '&larr' =>      '&#x2190',\r
574                         '&uarr' =>      '&#x2191',\r
575                         '&rarr' =>      '&#x2192',\r
576                         '&darr' =>      '&#x2193',\r
577                         '&harr' =>      '&#x2194',\r
578                         '&crarr'        =>      '&#x21B5',\r
579                         '&lArr' =>      '&#x21D0',\r
580                         '&uArr' =>      '&#x21D1',\r
581                         '&rArr' =>      '&#x21D2',\r
582                         '&dArr' =>      '&#x21D3',\r
583                         '&hArr' =>      '&#x21D4',\r
584                         '&forall'       =>      '&#x2200',\r
585                         '&part' =>      '&#x2202',\r
586                         '&exist'        =>      '&#x2203',\r
587                         '&empty'        =>      '&#x2205',\r
588                         '&nabla'        =>      '&#x2207',\r
589                         '&isin' =>      '&#x2208',\r
590                         '&notin'        =>      '&#x2209',\r
591                         '&ni'           =>      '&#x220B',\r
592                         '&prod' =>      '&#x220F',\r
593                         '&sum'          =>      '&#x2211',\r
594                         '&minus'        =>      '&#x2212',\r
595                         '&lowast'       =>      '&#x2217',\r
596                         '&radic'        =>      '&#x221A',\r
597                         '&prop' =>      '&#x221D',\r
598                         '&infin'        =>      '&#x221E',\r
599                         '&ang'          =>      '&#x2220',\r
600                         '&and'          =>      '&#x2227',\r
601                         '&or'           =>      '&#x2228',\r
602                         '&cap'          =>      '&#x2229',\r
603                         '&cup'          =>      '&#x222A',\r
604                         '&int'          =>      '&#x222B',\r
605                         '&there4'       =>      '&#x2234',\r
606                         '&sim'          =>      '&#x223C',\r
607                         '&cong' =>      '&#x2245',\r
608                         '&asymp'        =>      '&#x2248',\r
609                         '&ne'           =>      '&#x2260',\r
610                         '&equiv'        =>      '&#x2261',\r
611                         '&le'           =>      '&#x2264',\r
612                         '&ge'           =>      '&#x2265',\r
613                         '&sub'          =>      '&#x2282',\r
614                         '&sup'          =>      '&#x2283',\r
615                         '&nsub' =>      '&#x2284',\r
616                         '&sube' =>      '&#x2286',\r
617                         '&supe' =>      '&#x2287',\r
618                         '&oplus'        =>      '&#x2295',\r
619                         '&otimes'       =>      '&#x2296',\r
620                         '&perp' =>      '&#x22A5',\r
621                         '&sdot' =>      '&#x22C5',\r
622                         '&lceil'        =>      '&#x2368',\r
623                         '&rceil'        =>      '&#x2309',\r
624                         '&lfloor'       =>      '&#x230A',\r
625                         '&rfloor'       =>      '&#x230B',\r
626                         '&lang' =>      '&#x2329',\r
627                         '&rang' =>      '&#x2330',\r
628                         '&loz'          =>      '&#x25CA',\r
629                         '&spades'       =>      '&#x2660',\r
630                         '&clubs'        =>      '&#x2663',\r
631                         '&hearts'       =>      '&#x2665',\r
632                         '&diams'        =>      '&#x2666'\r
633                 ),\r
634                 'Windows-1252' => array(\r
635                         '&#x80;'        =>      '&#x20AC;',\r
636                         '&#x82;'        =>      '&#x201A;',\r
637                         '&#x83;'        =>      '&#x0192;',\r
638                         '&#x84;'        =>      '&#x201E;',\r
639                         '&#x85;'        =>      '&#x2026;',\r
640                         '&#x86;'        =>      '&#x2020;',\r
641                         '&#x87;'        =>      '&#x2021;',\r
642                         '&#x88;'        =>      '&#x02C6;',\r
643                         '&#x89;'        =>      '&#x2030;',\r
644                         '&#x8A;'        =>      '&#x0160;',\r
645                         '&#x8B;'        =>      '&#x2039;',\r
646                         '&#x8C;'        =>      '&#x0152;',\r
647                         '&#x8E;'        =>      '&#x017D;',\r
648                         '&#x91;'        =>      '&#x2018;',\r
649                         '&#x92;'        =>      '&#x2019;',\r
650                         '&#x93;'        =>      '&#x201C;',\r
651                         '&#x94;'        =>      '&#x201D;',\r
652                         '&#x95;'        =>      '&#x2022;',\r
653                         '&#x96;'        =>      '&#x2013;',\r
654                         '&#x97;'        =>      '&#x2014;',\r
655                         '&#x98;'        =>      '&#x02DC;',\r
656                         '&#x99;'        =>      '&#x2122;',\r
657                         '&#x9A;'        =>      '&#x0161;',\r
658                         '&#x9B;'        =>      '&#x203A;',\r
659                         '&#x9C;'        =>      '&#x0153;',\r
660                         '&#x9E;'        =>      '&#x017E;',\r
661                         '&#x9F;'        =>      '&#x0178;',\r
662                 )\r
663         );\r
664 }\r