17 abril 2008
Tratamiento de caracteres extendidos de HTML con Perl
Muchas veces no se ven bien los caracteres nacionales como ñÑ,áÁ,... según son escritos, y se tienen que convertir por ñ o á para que esos caractéres se vean bien en cualquier navegador en cualquier sistema operativo. Si se quiere convertir las cadenas en formato de idioma original al formato HTML, esta función puede ayudar:
sub filtra{ my %CHAR = ( 'AElig'=>"\xc3\x86", 'Aacute'=>"\xc3\x81", 'Acirc'=>"\xc3\x82", 'Agrave'=>"\xc3\x80", 'Alpha'=>"\xce\x91", 'Aring'=>"\xc3\x85", 'Atilde'=>"\xc3\x83", 'Auml'=>"\xc3\x84", 'Beta'=>"\xce\x92", 'Ccedil'=>"\xc3\x87", 'Chi'=>"\xce\xa7", 'Dagger'=>"\xe2\x80\xa1",'Delta'=>"\xce\x94", 'ETH'=>"\xc3\x90", 'Eacute'=>"\xc3\x89", 'Ecirc'=>"\xc3\x8a", 'Egrave'=>"\xc3\x88", 'Epsilon'=>"\xce\x95", 'Eta'=>"\xce\x97", 'Euml'=>"\xc3\x8b", 'Gamma'=>"\xce\x93", 'Iacute'=>"\xc3\x8d", 'Icirc'=>"\xc3\x8e", 'Igrave'=>"\xc3\x8c", 'Iota'=>"\xce\x99", 'Iuml'=>"\xc3\x8f", 'Kappa'=>"\xce\x9a", 'Lambda'=>"\xce\x9b", 'Mu'=>"\xce\x9c", 'Ntilde'=>"\xc3\x91", 'Nu'=>"\xce\x9d", 'OElig'=>"\xc5\x92", 'Oacute'=>"\xc3\x93", 'Ocirc'=>"\xc3\x94", 'Ograve'=>"\xc3\x92", 'Omega'=>"\xce\xa9", 'Omicron'=>"\xce\x9f", 'Oslash'=>"\xc3\x98", 'Otilde'=>"\xc3\x95", 'Ouml'=>"\xc3\x96", 'Phi'=>"\xce\xa6", 'Pi'=>"\xce\xa0", 'Prime'=>"\xe2\x80\xb3",'Psi'=>"\xce\xa8", 'Rho'=>"\xce\xa1", 'Scaron'=>"\xc5\xa0", 'Sigma'=>"\xce\xa3", 'THORN'=>"\xc3\x9e", 'Tau'=>"\xce\xa4", 'Theta'=>"\xce\x98", 'Uacute'=>"\xc3\x9a", 'Ucirc'=>"\xc3\x9b", 'Ugrave'=>"\xc3\x99", 'Upsilon'=>"\xce\xa5", 'Uuml'=>"\xc3\x9c", 'Xi'=>"\xce\x9e", 'Yacute'=>"\xc3\x9d", 'Yuml'=>"\xc5\xb8", 'Zeta'=>"\xce\x96", 'aacute'=>"\xc3\xa1", 'acirc'=>"\xc3\xa2", 'acute'=>"\xc2\xb4", 'aelig'=>"\xc3\xa6", 'agrave'=>"\xc3\xa0", 'alefsym'=>"\xe2\x84\xb5", 'alpha'=>"\xce\xb1", 'and'=>"\xe2\x88\xa7", 'ang'=>"\xe2\x88\xa0", 'apos'=>"'", 'aring'=>"\xc3\xa5", 'asymp'=>"\xe2\x89\x88",'atilde'=>"\xc3\xa3", 'auml'=>"\xc3\xa4", 'bdquo'=>"\xe2\x80\x9e",'beta'=>"\xce\xb2", 'brvbar'=>"\xc2\xa6", 'bull'=>"\xe2\x80\xa2", 'cap'=>"\xe2\x88\xa9", 'ccedil'=>"\xc3\xa7", 'cedil'=>"\xc2\xb8", 'cent'=>"\xc2\xa2", 'chi'=>"\xcf\x87", 'circ'=>"\xcb\x86", 'clubs'=>"\xe2\x99\xa3",'cong'=>"\xe2\x89\x85", 'copy'=>"\xc2\xa9", 'crarr'=>"\xe2\x86\xb5",'cup'=>"\xe2\x88\xaa", 'curren'=>"\xc2\xa4", 'dArr'=>"\xe2\x87\x93", 'dagger'=>"\xe2\x80\xa0",'darr'=>"\xe2\x86\x93",'deg'=>"\xc2\xb0", 'delta'=>"\xce\xb4", 'diams'=>"\xe2\x99\xa6", 'divide'=>"\xc3\xb7", 'eacute'=>"\xc3\xa9", 'ecirc'=>"\xc3\xaa", 'egrave'=>"\xc3\xa8", 'empty'=>"\xe2\x88\x85", 'emsp'=>"\xe2\x80\x83", 'ensp'=>"\xe2\x80\x82", 'epsilon'=>"\xce\xb5", 'equiv'=>"\xe2\x89\xa1",'eta'=>"\xce\xb7", 'eth'=>"\xc3\xb0", 'euml'=>"\xc3\xab", 'euro'=>"\xe2\x82\xac", 'exist'=>"\xe2\x88\x83",'fnof'=>"\xc6\x92", 'forall'=>"\xe2\x88\x80",'frac12'=>"\xc2\xbd", 'frac14'=>"\xc2\xbc", 'frac34'=>"\xc2\xbe", 'frasl'=>"\xe2\x81\x84", 'gamma'=>"\xce\xb3", 'ge'=>"\xe2\x89\xa5", 'hArr'=>"\xe2\x87\x94", 'harr'=>"\xe2\x86\x94", 'hearts'=>"\xe2\x99\xa5", 'hellip'=>"\xe2\x80\xa6",'iacute'=>"\xc3\xad", 'icirc'=>"\xc3\xae", 'iexcl'=>"\xc2\xa1", 'igrave'=>"\xc3\xac", 'image'=>"\xe2\x84\x91",'infin'=>"\xe2\x88\x9e",'int'=>"\xe2\x88\xab", 'iota'=>"\xce\xb9", 'iquest'=>"\xc2\xbf", 'isin'=>"\xe2\x88\x88", 'iuml'=>"\xc3\xaf", 'kappa'=>"\xce\xba", 'lArr'=>"\xe2\x87\x90", 'lambda'=>"\xce\xbb", 'lang'=>"\xe2\x8c\xa9", 'laquo'=>"\xc2\xab", 'larr'=>"\xe2\x86\x90", 'lceil'=>"\xe2\x8c\x88",'ldquo'=>"\xe2\x80\x9c", 'le'=>"\xe2\x89\xa4", 'lfloor'=>"\xe2\x8c\x8a",'lowast'=>"\xe2\x88\x97",'loz'=>"\xe2\x97\x8a",'lrm'=>"\xe2\x80\x8e", 'lsaquo'=>"\xe2\x80\xb9",'lsquo'=>"\xe2\x80\x98",'macr'=>"\xc2\xaf", 'mdash'=>"\xe2\x80\x94",'micro'=>"\xc2\xb5", 'middot'=>"\xc2\xb7", 'minus'=>"\xe2\x88\x92",'mu'=>"\xce\xbc", 'nabla'=>"\xe2\x88\x87",'nbsp'=>"\xc2\xa0", 'ndash'=>"\xe2\x80\x93",'ne'=>"\xe2\x89\xa0", 'ni'=>"\xe2\x88\x8b", 'not'=>"\xc2\xac", 'notin'=>"\xe2\x88\x89", 'nsub'=>"\xe2\x8a\x84", 'ntilde'=>"\xc3\xb1", 'nu'=>"\xce\xbd", 'oacute'=>"\xc3\xb3", 'ocirc'=>"\xc3\xb4", 'oelig'=>"\xc5\x93", 'ograve'=>"\xc3\xb2", 'oline'=>"\xe2\x80\xbe",'omega'=>"\xcf\x89", 'omicron'=>"\xce\xbf", 'oplus'=>"\xe2\x8a\x95",'or'=>"\xe2\x88\xa8", 'ordf'=>"\xc2\xaa", 'ordm'=>"\xc2\xba", 'oslash'=>"\xc3\xb8", 'otilde'=>"\xc3\xb5", 'otimes'=>"\xe2\x8a\x97",'ouml'=>"\xc3\xb6", 'para'=>"\xc2\xb6", 'part'=>"\xe2\x88\x82", 'permil'=>"\xe2\x80\xb0",'perp'=>"\xe2\x8a\xa5",'phi'=>"\xcf\x86", 'pi'=>"\xcf\x80", 'piv'=>"\xcf\x96", 'plusmn'=>"\xc2\xb1", 'pound'=>"\xc2\xa3", 'prime'=>"\xe2\x80\xb2",'prod'=>"\xe2\x88\x8f", 'prop'=>"\xe2\x88\x9d", 'psi'=>"\xcf\x88", 'rArr'=>"\xe2\x87\x92", 'radic'=>"\xe2\x88\x9a",'rang'=>"\xe2\x8c\xaa", 'raquo'=>"\xc2\xbb", 'rarr'=>"\xe2\x86\x92", 'rceil'=>"\xe2\x8c\x89",'rdquo'=>"\xe2\x80\x9d",'real'=>"\xe2\x84\x9c", 'reg'=>"\xc2\xae", 'rfloor'=>"\xe2\x8c\x8b",'rho'=>"\xcf\x81", 'rlm'=>"\xe2\x80\x8f", 'rsaquo'=>"\xe2\x80\xba",'rsquo'=>"\xe2\x80\x99", 'sbquo'=>"\xe2\x80\x9a",'scaron'=>"\xc5\xa1", 'sdot'=>"\xe2\x8b\x85", 'sect'=>"\xc2\xa7", 'shy'=>"\xc2\xad", 'sigma'=>"\xcf\x83", 'sigmaf'=>"\xcf\x82", 'sim'=>"\xe2\x88\xbc", 'spades'=>"\xe2\x99\xa0",'sub'=>"\xe2\x8a\x82", 'sube'=>"\xe2\x8a\x86", 'sum'=>"\xe2\x88\x91", 'sup1'=>"\xc2\xb9", 'sup2'=>"\xc2\xb2", 'sup3'=>"\xc2\xb3", 'sup'=>"\xe2\x8a\x83", 'supe'=>"\xe2\x8a\x87", 'szlig'=>"\xc3\x9f", 'tau'=>"\xcf\x84", 'there4'=>"\xe2\x88\xb4", 'theta'=>"\xce\xb8", 'thetasym'=>"\xcf\x91", 'thinsp'=>"\xe2\x80\x89",'thorn'=>"\xc3\xbe", 'tilde'=>"\xcb\x9c", 'times'=>"\xc3\x97", 'trade'=>"\xe2\x84\xa2",'uArr'=>"\xe2\x87\x91", 'uacute'=>"\xc3\xba", 'uarr'=>"\xe2\x86\x91", 'ucirc'=>"\xc3\xbb", 'ugrave'=>"\xc3\xb9", 'uml'=>"\xc2\xa8", 'upsih'=>"\xcf\x92", 'upsilon'=>"\xcf\x85", 'uuml'=>"\xc3\xbc", 'weierp'=>"\xe2\x84\x98",'xi'=>"\xce\xbe", 'yacute'=>"\xc3\xbd", 'yen'=>"\xc2\xa5", 'yuml'=>"\xc3\xbf", 'zeta'=>"\xce\xb6", 'zwj'=>"\xe2\x80\x8d", 'zwnj'=>"\xe2\x80\x8c" ); my $texto = shift; foreach my $clave (keys(%CHAR)){ $texto =~ s/$CHAR{$clave}/&$clave;/gim; } return $texto; }
GeoURL