headers - Codificación de caracteres jQuery AJAX
jquery ajax headers (22)
Actualmente estoy codificando un sitio web francés. Hay una página de programación, donde un enlace en el lateral se puede utilizar para cargar el horario de otro día.
Aquí está el JS que estoy usando para hacer esto:
<script type="text/javascript">
function load(y) {
$.get(y,function(d) {
$("#replace").html(d);
mod();
});
}
function mod() {
$("#dates a").click(function() {
y = $(this).attr("href");
load(y);
return false;
});
}
mod();
</script>
El AJAX real funciona como un encanto. Mi problema radica en la respuesta a la solicitud.
Debido a que es un sitio web francés, hay muchas letras acentuadas. Estoy usando el juego de caracteres ISO-8859-15 por esa misma razón. Sin embargo, en la respuesta a mi solicitud de AJAX, los acentos se vuelven? Porque la codificación de caracteres parece cambiar a UTF-8.
¿Cómo evito esto? Ya he intentado agregar algo de PHP en la parte superior de los documentos solicitados para establecer el juego de caracteres:
<?php header(''Content-Type: text/html; charset=ISO-8859-15''); ?>
Pero eso tampoco parece funcionar. ¿Alguna idea?
Además, mientras cualquiera de ustedes está mirando aquí ... ¿por qué la columna de la derecha parece hacerse más pequeña cuando se carga una página nueva, lo que hace que la tabla se distorsione y cada <li>
dentro de la <td>
ajuste a la siguiente línea?
Aclamaciones
Acabo de cambiar {"type":"GET"}
a {"type":"POST"}
y trabajé como un encanto con ISO-8859-1
Al imprimir las variables en el archivo ajax. Poner un
htmlentities()
A su alrededor, fíjate si funciona. Trabajó para mí en una aplicación ajax de Islandia.
Debe configurar su servidor para usar ISO-8859-15 como codificación de caracteres (agregando el encabezado HTTP apropiado). Hacerlo en el cuerpo del html no ayudará.
Puedo ver esta línea
<?php header(''Content-Type: text/html; charset=ISO-8859-15''); ?>
en la fuente de tu html Esto no debería suceder. Utilizando Live HTTP Headers no puedo ver el encabezado HTTP de charset apropiado. Úselo tanto para su primera página como para el servicio de Ajax.
Especificar el tipo de contenido en la llamada AJAX resolvió mis problemas en un sitio noruego.
$.ajax({
data: parameters,
type: "POST",
url: ajax_url,
timeout: 20000,
contentType: "application/x-www-form-urlencoded;charset=ISO-8859-15",
dataType: ''json'',
success: callback
});
También debería especificar el juego de caracteres en el servidor.
<?php header(''Content-Type: text/html; charset=ISO-8859-15''); ?>
Estaba teniendo problemas similares, trabajando en un sistema de comentarios de contenido en nuestro portal en español. Lo que finalmente resolvió mi problema, después de muchas horas de búsqueda, en lugar de jugar con jQuery charset, que parece usar utf-8 sin importar qué, fue para decodificar desde utf-8 de nuevo a ISO-8859-1 en el PHP que procesaba el POSTE ajax En PHP hay una función utf8_decode()
, utf8_decode()
, así que lo primero que hago con la cadena de comentarios es esto:
$comentario = utf8_decode($_POST[''comentario'']);
(y luego nl2br()
funciones de PHP nl2br()
y htmlentities()
para preparar el texto para ser almacenado con entidades html en lugar de caracteres especiales)
Buena suerte y paz en todo! Seba
He estado jugando con este problema y descubrí que esta solución funciona para Firefox y Safari (sí, estoy en un Mac en este momento).
al recibir la solicitud, hice un content-type = iso-8859-1 aquí:
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
httpRequest = new XMLHttpRequest();
if (httpRequest.overrideMimeType) {
httpRequest.overrideMimeType(''text/xml; charset=ISO-8859-1'');
}
}
Por favor, dime si alguien se entera de que esto no funciona, es decir.
He tenido el mismo problema con páginas que:
- Se muestra bien cuando se lo llama normalmente
- Tener los caracteres especiales en mal estado cuando se los llama a través de una solicitud de ajax
Para resolver el problema (usando php), utilicé utf8_encode()
o htmlentities()
en los datos fuente. Ambos funcionaron, los he usado en diferentes proyectos.
Intenté leer un archivo json / text local usando $ .ajax y la codificación no funcionó al principio ... Lo conseguí trabajando guardando el archivo json como codificación UTF-8. Esto se puede hacer simplemente con el bloc de notas de Windows ... use "guardar como", y luego debajo del nombre del archivo puede establecer la codificación en UTF-8.
¡buena suerte!
Intenté muchas sugerencias para leer en un archivo de texto con caracteres especiales alemanes (ä, ö, ü). En el final:
$.ajax({
async:false,
type: "GET",
url: "data/FileName.txt",
dataType: "text",
contentType: "application/x-www-form-urlencoded;charset=UTF-8",
success: function (data) {
alert(data);
}
});
permítanme leer los caracteres especiales, pero DESPUÉS de que haya guardado explícitamente FileName.txt en el formato UTF-8 . El formato estándar para guardar archivos de texto en el Editor de Windows es ANSI y no UTF-8, pero se puede cambiar si "Guardar como" y usar el cuadro desplegable al lado del botón Guardar o usar un mejor Editor para empezar.
Llegué a esta pregunta con exactamente el mismo problema que el asker. Las respuestas aquí son muy informativas, y probé casi todas y cada una de las respuestas sugeridas. Ninguna de las respuestas aquí funcionó para mí, podría haber habido una ligera diferencia en mi problema. Y ese parece ser el caso para muchos. Lo intenté mucho antes de terminar con una respuesta.
Así que ahora estoy agregando a la ya larga lista de respuestas, una solución propia que resolvió mi tipo de problema de codificación.
Hice solo dos cosas. En el script de conexión a la base de datos, agregué:
mysql_set_charset(''utf8'',$connection);
y aparte de eso:
- Cambié la codificación de todos los archivos a UTF-8
El punto es que todo debe ser de la misma codificación. Y al crear nuevos archivos php, para las secuencias de comandos no basta con cambiar la codificación en la secuencia de comandos: el archivo en sí debe estar codificado correctamente.
Me he enfrentado al mismo problema y lo intenté de varias maneras. Y encontré la solución. Si configura el encabezado de solicitud para "Aceptar" como a continuación;
$.ajax({
data: parameters,
type: "POST",
url: ajax_url,
dataType: ''json'',
beforeSend : function(xhr) {
xhr.setRequestHeader(''Accept'', "text/html; charset=utf-8");
},
success: callback
});
verás que todos los personajes parecen correctos
NO ACEPTO que todo deba ser UTF-8, puede hacer que funcione perfectamente con ISO 8859, lo hice, por favor lea mi respuesta aquí.
Para mi aplicación PHP, la solución fue incluir la función utf8_decode para cada variable get in $_POST
.
Ej: (LADO DEL SERVIDOR)
if( strtoupper($_SERVER[''REQUEST_METHOD'']) == "POST" ){
$variable = htmlentities($_POST[''variable'']); // wrong
$variable = htmlentities( utf8_decode($_POST[''variable'']) ); // right
}
Abraços !!! (¡¡¡Adiós!!!)
Se supone que UTF-8 maneja todos los acentos y caracteres extranjeros, ¿por qué no utilizarlo en su fuente de datos?
EDITAR
[ Archivar copia del archivo de prueba. ] con tus datos
Todo debería ser UTF-8 en primer lugar. Cargué los archivos en Notepad ++, convertí a utf-8 y cambié manualmente los caracteres a los acentos necesarios. Una vez hecho, todo funciona como un amuleto.
Por cierto, a menos que su servidor esté definido para archivos .html de php-process, los archivos que está cargando con ajax no están obteniendo su juego de caracteres iso. Si insiste en usar el juego de caracteres ISO, solicite un archivo php en lugar de un archivo html y defina el juego de caracteres en el encabezado (no en el archivo).
Si está utilizando CodeIgniter, puede resolverlo agregando el siguiente código a su Controlador antes de cargar cualquier Vista (suponiendo que tenga un juego de charset
correctamente configurado en su configuración. De lo contrario, simplemente ponga charset=whateveryouwant
.
$this->output->set_header(''Content-type: text/html; charset=''.$this->config->item(''charset''));
La forma en que lo hice fue agregar esa línea al constructor de MY_Controller, mi superclase para todos los Controladores, de esta manera me aseguro de no tener problemas de codificación en ninguna parte.
Por cierto, esto no afecta los retornos JSON (que están codificados en UTF-8).
Si toda la aplicación está usando ISO-8859-1, puede modificar su jquery.js reemplazando todas las ocurrencias de encodeURIComponent
por escape
(hay 2 ocurrencias para reemplazar en la secuencia de comandos actual de jquery - 1.5.1)
Vea encodeUIComponent y escape para más información
Sugeriría fuertemente el uso del método javascript escape ()
Puedes usar esto con jQuery al tomar un valor de formulario así:
var encodedString = escape($("#myFormFieldID").val());
Tuve un problema con las letras suecas / noruegas que aparecían como signos de interrogación, a pesar de haber especificado:
contentType: "application/json; charset=utf-8",
Esto fue resuelto agregando encodeURIComponent
a la cadena.
url: "/set_comment.do?text=" + encodeURIComponent(comment),
Tuve un problema similar con ASP con mis páginas. Lo he resuelto así:
1) Insertado al comienzo del archivo ASP llamado por el método Jquery ajax la instrucción:
Response.Charset = "windows-1252"
En la página My asp antes del charset no estaba definido y había guardado mi archivo con codificación ANSI (con un editor de texto como notepad ++)
2) En el archivo html que llama al archivo ASP con el método jquery ajax, he insertado el parámetro content-type que ve a continuación:
$.ajax({
data: parameters,
type: "POST",
url: ajax_url,
datatype: ''html'',
contentType: "text/html;charset=windows-1252",
En resumen, es importante definir en su archivo ASP llamado juego de caracteres. Extrañamente, veo que mi jquery funciona con Windows-1252 pero no funciona con el juego de caracteres ISO-8859-1: en este caso, el método jquery ajax da una excepción.
Tuve un problema similar. Tengo un archivo de texto con datos json que tiene texto en francés. Siempre hubo problemas al mostrar algunos personajes. En mi caso, el programa de JavaScript usa Ajax para recuperar el archivo de texto json de la siguiente manera:
$.ajax({
async: false,
type: ''GET'',
url: ''some-url'',
success: function(data, status) {
mainController.constructionStageMaster = data.records;
}
});
Los datos devueltos siempre tenían letras francesas acentuadas incorrectas.
El texto json se ve de la siguiente manera:
{
"records": [
{
"StageDesc": "Excavation, Fondation et Bases",
"Allowed": 9,
"Completed": 0,
"TotalCompleted": ""
},
{
"StageDesc": "Étanchement et Remblayage",
"Allowed": 3,
"Completed": 0,
"TotalCompleted": ""
},
{
"StageDesc": "Encadrement et revêtement mural intermédiaire",
"StageDesc_fr": "Encadrement et revêtement mural intermédiaire np++",
"StageDesc_fr2": "Encadrement et revêtement mural intermédiaire",
"Allowed": 15,
"Completed": 0,
"TotalCompleted": ""
}
...
]
}
Observe que en los datos de la muestra anterior, el tercer elemento, coloqué el texto con la ê
é
correcta e incorrecta con letras acentuadas en francés.
Para su información, parece que hay alguna configuración global del proyecto Eclipse que utiliza ISO-8859-1
codificación de caracteres ISO-8859-1
. En tu caso, podría ser una codificación diferente.
Después de verificar las soluciones anteriores y jugar con el proyecto, esto es lo que resolvió mi problema:
- Encuentre la fuente del texto que tiene la visualización correcta del texto en francés
- Copia el texto
- Goto Eclipse, abra el archivo de texto que contiene los datos
- Haga clic derecho en el archivo en el explorador, abra las propiedades y cambie la codificación a
ISO-8859-1
- Repare el texto para que se muestre correctamente. Use copiar / pegar o el teclado
- Puede que tenga que usar las teclas de flecha del teclado (izquierda / derecha) para asegurarse de que no haya letras ocultas que se mostrarán en HTML con una forma divertida. Eliminar esa carta oculta
- Guarda el archivo
Ahora, en mi caso, no especifiqué ninguna opción de codificación en la llamada Ajax y funciona bien. Además, si cambio la codificación del archivo de texto con datos json, aún así funcionaría bien.
Tarek
$str=iconv("windows-1250","UTF-8",$str);
lo que me ayudó en el eventual
<script type="text/javascript">
function GetContent(idUser){
$.ajaxSetup({
url: ''ping.php''
});
$.ajax({
type: "POST",
url: "blablabla.php",
dataType: "text",
data: ({ParamUserID:idUser}),// here we def wich variabe is assiciated
contentType: "application/x-www-form-urlencoded; charset=iso-8859-1",
success: function(html) {
$(''#user_specified_content'').html(html);
}
});
}
</script>
Este es el script del que obtengo mi contenido de la página blabla.php.
Cuando recibo mis datos sobre el éxito, mis acentos no aparecen.
He encontrado una solución de trabajo muy buena por mi cuenta para buscar datos con acentos en los datos .success
función .success
En mi página de blabla Hice esto para traer una solución a mi problema:
Yo uso utf8_encode(place your data here)
en mi archivo php. Véalo en acción a continuación:
while( $row = sqlsrv_fetch_array($recordset) )
{
<option value="<?php echo $row["xyz"]; ?>"><?php echo utf8_encode($row["gName"]) . '' | '' . utf8_encode($row["gManagerName"]); ?></option>
}