2011-02-13 12 views

Respuesta

45

ASCII es un subconjunto de UTF-8, por lo que si un documento es ASCII de lo que ya es UTF8.

+0

palabra de precaución, si el ASCII es "extendida" ascii, entonces se puede encontrar problemas. https://en.wikipedia.org/wiki/Extended_ASCII – Azeroth2b

19

Si está seguro de que su codificación actual es pura ASCII, entonces no tiene que hacer nada porque ASCII ya es un UTF-8 válido.

Pero si aún desea convertir, sólo para estar seguro de que su UTF-8, entonces usted puede utilizar iconv

$string = iconv('ASCII', 'UTF-8//IGNORE', $string); 

El IGNORE, se descartarán los caracteres no válidos en caso de que algunos no eran ASCII válidos.

+0

Siempre he entendido que "IGNORE" es automática/implícitamente incorrecta. – tchrist

2

"ASCII es un subconjunto de UTF-8, entonces ..." - entonces UTF-8 es un conjunto? :)

En otras palabras: cualquier cadena construida con code points de x00 a x7F tiene indistinguibles representaciones (secuencias de bytes) en ASCII y UTF-8. Convertir tal cadena no tiene sentido.

+1

La frase clave aquí es "puntos de código de x00 a x7F". Si su "ASCII" tiene puntos de código de x10 a xFF, entonces necesita hacer más trabajo. – Azeroth2b

2

Usa mb_convert_encoding para convertir un ASCII a UTF-8. Más información here

$string = "chárêctërs"; 
print(mb_detect_encoding ($string)); 

$string = mb_convert_encoding($string, "UTF-8"); 
print(mb_detect_encoding ($string)); 
0

El uso de iconv parece mejor solución pero mi caso tengo Aviso forman esta función: "Detectado un carácter ilegal en la cadena de entrada en" (sin igonore). utilizo 2 funciones para manipular cadenas de caracteres ASCII convierten a la matriz de código ASCII y luego serializar:

public static function ToAscii($string) { 
    $strlen = strlen($string); 
    $charCode = array(); 
    for ($i = 0; $i < $strlen; $i++) { 
     $charCode[] = ord(substr($string, $i, 1)); 
    } 
    $result = json_encode($charCode); 
    return $result; 
} 

public static function fromAscii($string) { 
    $charCode = json_decode($string); 
    $result = ''; 
    foreach ($charCode as $code) { 
     $result .= chr($code); 
    }; 
    return $result; 
} 
Cuestiones relacionadas