utf8_encode utf8 example php javascript ajax utf-8

utf8 - ¿Cómo evitar el eco del personaje 65279 en php?(Esta pregunta también se relaciona con Javascript xmlhttp.responseText(ajax))



utf8 encode php (9)

He encontrado un problema similar descrito here (y en otros lugares), donde como en una devolución de llamada ajax obtengo un xmlhttp.responseText que parece estar bien (cuando lo alerta, muestra el texto correcto), pero cuando uso un ''if'' declaración para compararla con la cadena - devuelve falso.

(También soy el que escribió el código del lado del servidor devolviendo esa cadena) - después de estudiar mucho la cadena - descubrí que la cadena tenía un "carácter invisible" como primer personaje. Un personaje que no se mostró Si lo copié en el Bloc de notas, borré el primer carácter, no se eliminará hasta que presione Eliminar nuevamente.

Hice un charCodeAt (0) para la cadena devuelta en xmlhttp.responseText. Y devolvió 65279 .

Buscar en Google revela que se trata de un tipo de control UTF-8 que se supone que configura la codificación "big-endian" o "small-endian".

Entonces, ahora sé la causa del problema, pero ... ¿por qué ese personaje se hace eco? En la fuente php simplemente uso

echo ''the string''...

y aparentemente, de alguna manera, produce [chr (65279)] la cadena ...

¿Por qué? ¿Y cómo puedo evitarlo?


Además de lo anterior, acabo de tener este problema cuando extraigo algunos datos de una base de datos MySQL (el juego de caracteres está configurado en UTF-8); el problema son las etiquetas HTML, permití algunas básicas como <p> y <a> cuando Lo mostré en la página, conseguí que el personaje & # 65729 mirara a través de Dev Tools en Chrome.

Así que eliminé las etiquetas de la tabla y eso eliminó el problema & # 65729 (y la línea en blanco encima del lugar donde se mostraría el texto.

Solo quería agregar a esto, ya que mi representante no es lo suficientemente alto como para comentar la respuesta.

EDITAR: Usando VIM, pude eliminar la lista de materiales con :set nobomb y puedes confirmar la presencia de la lista de materiales con :set bomb? que mostrará ya sea bomb o nobomb


Cuando se utiliza átomo, es un espacio en blanco al comienzo del documento antes de <?php


Para concluir, y especificar la solución:

El Bloc de notas de Windows agrega el carácter BOM (los 3 bytes: EF BB BF) a los archivos guardados con codificación utf-8.

A PHP no parece molestarle, a menos que incluya un archivo php en otro; luego las cosas se complican y las cadenas se muestran con el carácter (65279) antes de ellas.

Puede editar el archivo con otro editor de texto como Notepad ++ y usar la codificación
"Codificar en UTF-8 sin BOM",
y esto parece solucionar el problema.

Además, puedes guardar el otro archivo php con codificación ANSI en el bloc de notas, y esto también parece funcionar (es decir, en caso de que no uses ningún carácter extendido en el archivo, supongo ...)


Probablemente algo en el servidor. Si sabes que está allí, simplemente lo omitiré hasta que se resuelva.

myString = myString.substring(1)

Corta el primer personaje.


Si desea imprimir una cadena que contiene el carácter ZERO WIDTH NO-BREAK SPACE (por ejemplo, incluyendo un archivo externo que no sea PHP), intente con el siguiente código:

echo preg_replace("//xEF/xBB/xBF/", "", $string);


Si está utilizando Linux o Mac, aquí hay una solución elegante para deshacerse del personaje en PHP.

Si usa WordPress (el 25% de los sitios web de Internet funcionan con WordPress), es probable que un complemento o el tema activo introduzcan el carácter BOM debido a un archivo que contiene BOM (quizás ese archivo se haya editado en Windows). Si ese es el caso, vaya a su carpeta wp-content / themes / y ejecute el siguiente comando:

grep -rl $''/xEF/xBB/xBF'' .

Esto buscará archivos con BOM. Si tiene resultados .php en la lista, haga esto:

  1. Cambie el nombre del archivo a algo como filename.bom.bak.php
  2. Abra el archivo en su editor y copie el contenido en el clipbard.
  3. Crea un nuevo archivo y pega el contenido del portapapeles.
  4. Guarde el archivo con el nombre original filename.php

Si está lidiando con esto localmente, eventualmente tendrá que volver a cargar los archivos nuevos en el servidor.

Si no tiene resultados después de ejecutar el comando grep y está usando WordPress, entonces otro lugar para buscar archivos BOM es la carpeta / wp-content / plugins. Ve allí y ejecuta el comando nuevamente. Alternativamente, puede comenzar a desactivar todos los complementos y luego verificar si el problema se resuelve mientras activa los complementos nuevamente.

Si no está usando WordPress, vaya a la raíz de su carpeta de proyecto y ejecute el comando para buscar archivos con BOM. Si se encuentra algún archivo, ejecute el procedimiento de cuatro pasos descrito anteriormente.


También puedes eliminar el personaje en javascript con:

myString = myString.replace(String.fromCharCode(65279), "" );


Tuve este problema y cambié mi codificación a utf-8 sin bom, Ansi, etc. sin suerte. Mi problema fue causado por el uso de una función de inclusión php en el cuerpo html. Mover la función de inclusión a más de mi html (arriba! Etiqueta DOCTYPE) resolvió el problema.

Después de conocer mi problema, probé include, include_once y requería funciones. Todos los intentos de incluir un archivo desde el cuerpo html crearon el carácter extra 𐃁 diverso en el lugar donde comenzaría el código PHP.

También traté de asignar el resultado del include a una variable ... ie $ result = include ("myfile.txt"); con el mismo carácter extra que se agrega

Tenga en cuenta que mover el elemento de inclusión arriba del HTML no eliminará la aparición del carácter adicional, sin embargo, lo elimina de mis datos y fuera del área de contenido.


Utilizo "Dreamweaver CC 2015", de forma predeterminada tiene esta opción activada: "incluir firma BOM" o algo así, cuando hace clic en la opción Guardar como del menú Archivo. En la ventana que aparece, puedes ver "Opciones de Unicode ...". Puede deshabilitar la opción BOM. Y recuerde cambiar todos sus archivos así. O simplemente puede ir a preferencias y desactivar la opción BOM y guardar todos sus archivos.