He montón de archivos que no están en la codificación UTF-8 y estoy conversión de un sitio para la codificación UTF-8.

Estoy usando el script simple para los archivos que quiero guardar en formato utf-8, pero los archivos se guardan en edad de codificación:

header('Content-type: text/html; charset=utf-8');
mb_internal_encoding('UTF-8');
$fpath="folder";
$d=dir($fpath);
while (False !== ($a = $d->read()))
 {

 if ($a != '.' and $a != '..')
  {

  $npath=$fpath.'/'.$a;

  $data=file_get_contents($npath);

  file_put_contents('tempfolder/'.$a, $data);

  }

 }

¿Cómo puedo guardar archivos en la codificación utf-8?

InformationsquelleAutor Starmaster | 2011-01-29

10 Comentarios

  1. 47

    file_get_contents /file_put_contents no por arte de magia convertir la codificación.

    Usted tiene que convertir la cadena de caracteres de forma explícita; por ejemplo, con iconv() o mb_convert_encoding().

    Intente esto:

    $data = file_get_contents($npath);
    $data = mb_convert_encoding($data, 'UTF-8', 'OLD-ENCODING');
    file_put_contents('tempfolder/'.$a, $data);

    O, alternativamente, con PHP, filtros de flujo:

    $fd = fopen($file, 'r');
    stream_filter_append($fd, 'convert.iconv.UTF-8/OLD-ENCODING');
    stream_copy_to_stream($fd, fopen($output, 'w'));
    • Cómo son los arroyos más eficiente?
    • Más eficiente en este caso, ya que los datos recuperados se alimenta directamente a través de la función de conversión y en el flujo de salida sin necesidad de almacenamiento intermedio, o transferencia a la memoria de PHP y luego salir de nuevo
    • Es la secuencia de orden de los filtros, no es malo?
    • Si tengo una cadena con codificación UTF-8 caracteres y guardarlo en un archivo, PHP automáticamente detecta y establece la codificación correcta?
    • ¿Cuál es variable $a en la línea 3 del primer ejemplo?
    • En el caso de utilizar stream_filter_append: EDAD de CODIFICACIÓN/UTF-8

  2. 70

    Añadir lista de materiales: UTF-8

    file_put_contents($myFile, "\xEF\xBB\xBF".  $content); 
    • Esto debe ser aceptado respuesta… corto y dulce, y funciona!
    • Hay una distinción entre la creación de un archivo reconocido como UTF-8 y convertir el contenido que va a ese archivo. Un archivo de texto sin caracteres especiales tiene el mismo contenido como UTF-8 sin BOM, también de los analizadores de lo que podría ser la elaboración de su texto tiene una opción de codificación. PHP usa UTF-8, así que si usted ve el texto OK pero el archivo no parece ser UTF-8, es probable que el texto es UTF-8 y la adición de BOM es todo lo que usted necesita. Pero, no es la conversión. Este problema se ve a menudo, debido a que PHP es perezoso adición de lista de materiales, pero que en sí mismo está esperando en la entrada.
  3. 24
    <?php 
    función writeUTF8File($nombre_archivo,$contenido) { 
    $f=fopen($filename,"w"); 
    # Ahora UTF-8 - Agregar marca de orden de bytes 
    fwrite($f, pack("CCC",0xef,0xbb,0xbf)); 
    fwrite($f,$contenido); 
    fclose($f); 
    } 
    ?> 
    
    • Yo estaba tratando de crear un php descargar script para usar UTF-8 danesa de caracteres, esto es lo que faltaba, ty
    • +1 de mí :). Guardó mis horas
    • agradable con pack()
    • También funciona a UTF-16, pero con bytes: fwrite($f, pack(«CC»,0xff,0xfe));
  4. 3

    En Unix/Linux un simple comando de shell podría ser utilizado como alternativa para convertir todos los archivos de un directorio dado:

     recode L1..UTF8 dir/*

    Podría ser iniciado a través de PHPs exec() así.

    • No sabía acerca de este comando. Gracias! Yo uso Linux, incluso como estación de trabajo, todos mis servidores en Linux. Y ¿qué L1.. en el orden significa?
    • L1 es la abreviatura de Latin-1, el conjunto de caracteres de origen.
  5. 1
    //add BOM to fix UTF-8 in Excel
    fputs($fp, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) ));

    Tengo esta línea de Cool

  6. 0

    Si quieres utilizar recode de forma recursiva, y filtrar por tipo, intente esto:

    find . -name "*.html" -exec recode L1..UTF8 {} \;
  7. 0

    Esto funciona para mí. 🙂

    $f=fopen($filename,"w"); 
    # Now UTF-8 - Add byte order mark 
    fwrite($f, pack("CCC",0xef,0xbb,0xbf)); 
    fwrite($f,$content); 
    fclose($f); 
    • Esto funcionó para mí, la descarga de las páginas aspx que se han codificado con utf, en una plataforma de windows.
  8. -1

    Puse todos juntos y consiguió manera fácil de convertir ANSI archivos de texto a «UTF-8 Sin Marca»:

    function filesToUTF8($searchdir,$convdir,$filetypes) {
      $get_files = glob($searchdir.'*{'.$filetypes.'}', GLOB_BRACE);
      foreach($get_files as $file) {
        $expl_path = explode('/',$file);
        $filename = end($expl_path);
        $get_file_content = file_get_contents($file);
        $new_file_content = iconv(mb_detect_encoding($get_file_content, mb_detect_order(), true), "UTF-8", $get_file_content);
        $put_new_file = file_put_contents($convdir.$filename,$new_file_content);
      }
    }

    Uso: filesToUTF8(‘C:/Temp/’,’C:/Temp/conv_files/’,’php,txt’);

  9. -6
    1. Abrir sus archivos en windows notebook
    2. Cambiar la codificación a UTF-8 codificación
    3. Guardar el archivo
    4. Intentarlo de nuevo! :O)

Dejar respuesta

Please enter your comment!
Please enter your name here