mb_convert_encoding - Convierte caracteres utf8 a iso-88591 y vuelve a PHP
utf8 encode (10)
En mi caso, después de subir archivos con nombres que contenían esos caracteres, ni siquiera eran visibles con Filezilla. En el administrador de archivos Cpanel se les mostró? (bajo fondo negro). Y esta combinación hizo que se mostrara correctamente en el navegador (el documento HTML tiene codificación occidental):
$dspFileName = utf8_decode(htmlspecialchars(iconv(mb_internal_encoding(), ''utf-8'', basename($thisFile[''path'']))) );
Algunas de las secuencias de comandos usan codificación diferente, y cuando intento combinarlas, esto se convierte en un problema.
Pero no puedo cambiar la codificación que usan, en cambio quiero cambiar el encoder del resultado del script A, y usarlo como parámetro en el script B.
Entonces, ¿hay alguna manera simple de cambiar una cadena de UTF-8 a ISO-88591 en PHP? He consultado utf_encode y _decode, pero no hacen lo que quiero. ¿Por qué no existe ninguna función "utf2iso ()", o similar?
No creo que tenga caracteres que no puedan escribirse en formato ISO, así que no debería ser un gran problema.
En primer lugar, no use codificaciones diferentes. Lleva a un desastre, y UTF-8 es definitivamente el que deberías usar en todas partes.
Es probable que su entrada no sea ISO-8859-1, sino otra cosa (ISO-8859-15, Windows-1252). Para convertir desde esos, use iconv o mb_convert_encoding() .
Sin embargo, utf8_encode
y utf8_decode
deberían funcionar para ISO-8859-1. Sería bueno si pudiera publicar un enlace a un archivo o una cadena de ejemplo uuencoded o base64 para la cual la conversión falla o produce resultados inesperados.
Es mucho mejor usar
$ value = mb_convert_encode ($ value, ''HTML-ENTITIES'', ''UTF-8'');
Especialmente cuando usa la llamada AJAX para enviar caracteres ''ISO-8859-1''. Funciona para chino, japonés, checo, alemán y muchos más idiomas.
Necesita usar el paquete iconv , específicamente su función iconv.
Solía:
function utf8_to_html ($data) {
return preg_replace(
array (
''/ä/'',
''/ö/'',
''/ü/'',
''/é/'',
''/à/'',
''/è/''
),
array (
''ä'',
''ö'',
''ü'',
''é'',
''à'',
''è''
),
$data
);
}
Use html_entity_decode()
y htmlentities()
.
$html = html_entity_decode(htmlentities($html, ENT_QUOTES, ''UTF-8''), ENT_QUOTES , ''ISO-8859-1'');
htmlentities()
formatea tu entrada en UTF8
y html_entity_decode()
la vuelve a formatear en ISO-8859-1
.
Yo uso esta función:
function formatcell($data, $num, $fill=" ") {
$data = trim($data);
$data=str_replace(chr(13),'' '',$data);
$data=str_replace(chr(10),'' '',$data);
// translate UTF8 to English characters
$data = iconv(''UTF-8'', ''ASCII//TRANSLIT'', $data);
$data = preg_replace("/[/'/"/^/~/`]/i", '''', $data);
// fill it up with spaces
for ($i = strlen($data); $i < $num; $i++) {
$data .= $fill;
}
// limit string to num characters
$data = substr($data, 0, $num);
return $data;
}
echo formatcell("YES UTF8 String Zürich", 25, ''x''); //YES UTF8 String Zürichxxx
echo formatcell("NON UTF8 String Zurich", 25, ''x''); //NON UTF8 String Zurichxxx
Mira mi función en mi blog http://www.unexpectedit.com/php/php-handling-non-english-characters-utf8
establecer la metaetiqueta en la cabeza como
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
utilice el enlace http://www.i18nqa.com/debug/utf8-debug.html para reemplazar el carácter de símbolos que desee.
luego usa str_replace como
$find = array(''“'', ''’'', ''…'', ''—'', ''–'', ''‘'', ''é'', ''Â'', ''•'', ''Ëœ'', ''â€''); // en dash
$replace = array(''“'', ''’'', ''…'', ''—'', ''–'', ''‘'', ''é'', '''', ''•'', ''˜'', ''”'');
$content = str_replace($find, $replace, $content);
Es el método que uso y ayuda mucho. ¡Gracias!
Eche un vistazo a iconv()
o mb_convert_encoding()
. Por cierto: ¿por qué no utf8_encode()
y utf8_decode()
funcionan para ti?
utf8_decode - Convierte una cadena con caracteres ISO-8859-1 codificados con UTF-8 en un solo byte ISO-8859-1
utf8_encode - Codifica una cadena ISO-8859-1 para UTF-8
Entonces esencialmente
$utf8 = ''ÄÖÜ''; // file must be UTF-8 encoded
$iso88591_1 = utf8_decode($utf8);
$iso88591_2 = iconv(''UTF-8'', ''ISO-8859-1'', $utf8);
$iso88591_2 = mb_convert_encoding($utf8, ''ISO-8859-1'', ''UTF-8'');
$iso88591 = ''ÄÖÜ''; // file must be ISO-8859-1 encoded
$utf8_1 = utf8_encode($iso88591);
$utf8_2 = iconv(''ISO-8859-1'', ''UTF-8'', $iso88591);
$utf8_2 = mb_convert_encoding($iso88591, ''UTF-8'', ''ISO-8859-1'');
todos deberían hacer lo mismo, con utf8_en/decode()
que no requiere extensión especial, mb_convert_encoding()
requiere ext / mbstring e iconv()
requieren ext / iconv.
function parseUtf8ToIso88591(&$string){
if(!is_null($string)){
$iso88591_1 = utf8_decode($string);
$iso88591_2 = iconv(''UTF-8'', ''ISO-8859-1'', $string);
$string = mb_convert_encoding($string, ''ISO-8859-1'', ''UTF-8'');
}
}