txt superdelete nombres nombre muy largos largo eliminar ejemplo demasiado con carpetas carpeta borrar borra archivos archivo php utf-8 character-encoding byte-order-mark mojibake

php - superdelete - ¿Cómo elimino ï »¿desde el comienzo de un archivo?



unlink php ejemplo (22)

Tengo un archivo CSS que se ve bien cuando lo abro usando gedit , pero cuando lo lee PHP (para fusionar todos los archivos CSS en uno), este CSS tiene los siguientes caracteres anexados a él: ï »¿

PHP elimina todos los espacios en blanco, por lo que un ï »¿al azar en el medio del código arruina todo el asunto. Como mencioné, no puedo ver estos caracteres cuando abro el archivo en gedit, así que no puedo eliminarlos muy fácilmente.

Busqué en Google el problema, y ​​claramente hay algo mal con la codificación del archivo, lo que tiene sentido ya que he estado cambiando los archivos a diferentes servidores Linux / Windows a través de ftp y rsync , con una variedad de editores de texto. Aunque no sé mucho sobre la codificación de caracteres, la ayuda será apreciada.

Si esto ayuda, el archivo se guardará en formato UTF-8, y gedit no me permitirá guardarlo en formato ISO-8859-15 (el documento contiene uno o más caracteres que no se pueden codificar utilizando la codificación de caracteres especificada). Traté de guardarlo con terminaciones de línea de Windows y Linux, pero ninguno me ayudó.


  1. Copie el texto de su archivo filename.css.
  2. Cierre su archivo css.
  3. Cambie el nombre filename2.css para evitar un conflicto de nombre de archivo.
  4. En MS Notepad o Wordpad, crea un nuevo archivo.
  5. Pega el texto en él.
  6. Guárdelo como filename.css, seleccionando UTF-8 de las opciones de codificación.
  7. Subir filename.css

Abra el archivo PHP en cuestión, en Notepad ++.

Haga clic en Codificación en la parte superior y cambie de "Codificación en UTF-8 sin lista de materiales" a solo "Codificación en UTF-8". Guarde y sobrescriba el archivo en su servidor.


Abra su archivo en Notepad++ . En el menú Codificación , seleccione Convertir a UTF-8 sin BOM , guarde el archivo, reemplace el archivo anterior con este nuevo archivo. Y funcionará, malditamente seguro.


Aquí hay otra buena solución para el problema con BOM. Estos son dos scripts de VBScript (.vbs).

Uno para encontrar la lista de materiales en un archivo y otra para matar a la maldita lista de materiales en el archivo. Funciona bastante bien y es fácil de usar.

Simplemente crea un archivo .vbs y pega el siguiente código en él.

Puede usar el script de VBScript simplemente arrastrando y soltando el archivo sospechoso en el archivo .vbs. Le dirá si hay una lista de materiales o no.

'' Heiko Jendreck - personal helpdesk & webdesign '' http://www.phw-jendreck.de '' 2010.05.10 Vers 1.0 '' '' find_BOM.vbs '' ==================== '' Kleines Hilfsmittel, welches das BOM finden soll '' Const UTF8_BOM = "" Const UTF16BE_BOM = "þÿ" Const UTF16LE_BOM = "ÿþ" Const ForReading = 1 Const ForWriting = 2 Dim fso Set fso = WScript.CreateObject("Scripting.FileSystemObject") Dim f f = WScript.Arguments.Item(0) Dim t t = fso.OpenTextFile(f, ForReading).ReadAll If Left(t, 3) = UTF8_BOM Then MsgBox "UTF-8-BOM detected!" ElseIf Left(t, 2) = UTF16BE_BOM Then MsgBox "UTF-16-BOM (Big Endian) detected!" ElseIf Left(t, 2) = UTF16LE_BOM Then MsgBox "UTF-16-BOM (Little Endian) detected!" Else MsgBox "No BOM detected!" End If

Si te dice que hay una BOM, ve y crea el segundo archivo .vbs con el siguiente código y arrastra el archivo suspicios al archivo .vbs.

'' Heiko Jendreck - personal helpdesk & webdesign '' http://www.phw-jendreck.de '' 2010.05.10 Vers 1.0 '' '' kill_BOM.vbs '' ==================== '' Kleines Hilfmittel, welches das gefundene BOM löschen soll '' Const UTF8_BOM = "" Const ForReading = 1 Const ForWriting = 2 Dim fso Set fso = WScript.CreateObject("Scripting.FileSystemObject") Dim f f = WScript.Arguments.Item(0) Dim t t = fso.OpenTextFile(f, ForReading).ReadAll If Left(t, 3) = UTF8_BOM Then fso.OpenTextFile(f, ForWriting).Write (Mid(t, 4)) MsgBox "BOM gelöscht!" Else MsgBox "Kein UTF-8-BOM vorhanden!" End If

El código es de Heiko Jendreck .


BOM es solo una secuencia de caracteres ($ EF $ BB $ BF para UTF-8), así que simplemente elimínelos usando scripts o configure el editor para que no se agregue.

De quitar BOM de UTF-8 :

#!/usr/bin/perl @file=<>; $file[0] =~ s/^/xEF/xBB/xBF//; print(@file);

Estoy seguro de que se traduce a PHP fácilmente.


Compruebe en su index.php , busque "... charset=iso-8859-1 " y reemplácelo por "... charset=utf-8 ".

Quizás funcione.


El mismo problema, pero solo afectó un archivo, así que acabo de crear un archivo en blanco, copiar / pegar el código del archivo original al nuevo archivo, y luego reemplazar el archivo original. No es lujoso, pero funcionó.


En PHP , puede hacer lo siguiente para eliminar todos los caracteres que no sean, incluido el personaje en cuestión.

$response = preg_replace(''/[/x00-/x1F/x80-/xFF]/'', '''', $response);



En PHPStorm, para múltiples archivos y BOM no necesariamente al principio del archivo, puede buscar /x{FEFF} (Expresión regular) y reemplazar por nada.


Mismo problema, diferente solución.

Una línea en el archivo PHP estaba imprimiendo encabezados XML (que usan las mismas etiquetas de inicio / finalización que PHP). Parece que el código dentro de estas etiquetas establece la codificación, y se ejecutó dentro de PHP que dio como resultado los caracteres extraños. De cualquier forma, aquí está la solución:

# Original $xml_string = "&lt;?xml version=/"1.0/" encoding=/"UTF-8/"?&gt;"; # fixed $xml_string = "<" . "?xml version=/"1.0/" encoding=/"UTF-8/"?" . ">";


No sé PHP, así que no sé si esto es posible, pero la mejor solución sería leer el archivo como UTF-8 en lugar de otra codificación. La lista de materiales es en realidad un ESPACIO CERO SIN ESPACIO DE DESCANSO. Esto es un espacio en blanco, por lo que si el archivo se leyera con la codificación correcta (UTF-8), entonces la lista de materiales se interpretaría como un espacio en blanco y se ignoraría en el archivo CSS resultante.

Además, otra ventaja de leer el archivo con la codificación correcta es que no tiene que preocuparse de que los caracteres se malinterpreten. Su editor le dice que la página de códigos en la que desea guardarlo no incluirá todos los caracteres que necesita. Si PHP está leyendo el archivo en la codificación incorrecta, entonces es muy probable que otros caracteres además de la lista de materiales estén siendo malinterpretados silenciosamente. Use UTF-8 en todas partes, y estos problemas desaparecen.


Para aquellos con acceso shell aquí hay un pequeño comando para encontrar todos los archivos con el BOM configurado en el directorio public_html - asegúrese de cambiarlo a cuál es la ruta correcta en su servidor

Código:

grep -rl $''/xEF/xBB/xBF'' /home/username/public_html

y si se siente cómodo con el editor vi , abra el archivo en vi:

vi /path-to-file-name/file.php

Y ingrese el comando para eliminar la lista de materiales:

set nobomb

Guarda el archivo:

wq


Para mí, esto funcionó:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Si elimino este meta, el ï »¿aparece de nuevo. Espero que esto ayude a alguien...


Puede abrirlo por PhpStorm y hacer clic derecho en su archivo y hacer clic en Eliminar BOM ...


Puedes usar

vim -e -c ''argdo set fileencoding=utf-8|set encoding=utf-8| set nobomb| wq''

Reemplazar con awk parece funcionar, pero no está en su lugar.


Si necesita poder eliminar la lista de materiales de los archivos codificados en UTF-8, primero debe obtener un editor que esté al tanto de ellos.

Personalmente utilizo E Text Editor .

En la esquina inferior derecha, hay opciones para la codificación de caracteres, incluida la etiqueta BOM. Cargue su archivo, anule la selección de Byte Order Marker si está seleccionado, resave y debería hacerse.

Texto alternativo http://oth4.com/encoding.png

E no es gratuito, pero hay una versión de prueba gratuita, y es un excelente editor (compatibilidad limitada con TextMate ).


Tres palabras para ti:

Marca de orden de bytes (BOM)

Esa es la representación de la BOM UTF-8 en ISO-8859-1. Debe decirle a su editor que no use las listas de materiales o que use un editor diferente para eliminarlas.

Para automatizar la remoción de la BOM puede usar awk como se muestra en esta pregunta .

Como dice otra respuesta , lo mejor sería que PHP interpretara la BOM correctamente, para eso puedes usar mb_internal_encoding() , así:

<?php //Storing the previous encoding in case you have some other piece //of code sensitive to encoding and counting on the default value. $previous_encoding = mb_internal_encoding(); //Set the encoding to UTF-8, so when reading files it ignores the BOM mb_internal_encoding(''UTF-8''); //Process the CSS files... //Finally, return to the previous encoding mb_internal_encoding($previous_encoding); //Rest of the code... ?>


Tuve el mismo problema con la aparición de la BOM en algunos de mis archivos PHP (ï »¿ï» ¿).

Si usa PhpStorm , puede configurar la tecla de PhpStorm para eliminarla en Configuración -> Configuración de IDE -> Mapa de teclas -> Menú principal -> Archivo -> Eliminar lista de materiales.


Use Total Commander para buscar todos los archivos BOMed:

¿Manera elegante de buscar archivos UTF-8 con BOM?

  • Abra estos archivos en algún editor adecuado (que reconozca la lista de materiales) como Eclipse .

  • Cambia la codificación del archivo a ISO (clic derecho, propiedades).

  • Cortar ï »¿desde el comienzo del archivo, guardar

  • Cambie la codificación del archivo a UTF-8

... ¡y ni siquiera pienses en usar n ... d otra vez!


Yo tuve el mismo problema. El problema era porque uno de mis archivos php estaba en utf-8 (el más importante, el archivo de configuración que se incluye en todos los archivos php).

En mi caso, tuve 2 soluciones diferentes que funcionaron para mí:

Primero, cambié la configuración de Apache usando AddDefaultCharsetDirective en los archivos de configuración (o en .htaccess). Esta solución obliga a Apache a usar la codificación correcta.

AddDefaultCharset ISO-8859-1

La segunda solución fue cambiar la mala codificación del archivo php.


grep -rl $ ''/ xEF / xBB / xBF'' * | xargs vim -e -c ''argdo set fileencoding = utf-8 | set encoding = utf-8 | establecer nobomb | wq ''