Foros del Web » Programando para Internet » PHP »

Error: PHP utiliza un charset diferente para funciones

Estas en el tema de Error: PHP utiliza un charset diferente para funciones en el foro de PHP en Foros del Web. Tengo dos arrays para convertir caracteres especiales en entidades HTML: Código PHP: $specialChars     = array( "¡" , "¢" , "£" , "¤" , "¥" , "¦" ...
  #1 (permalink)  
Antiguo 16/05/2010, 11:50
 
Fecha de Ingreso: marzo-2010
Ubicación: Córdoba, Argentina
Mensajes: 21
Antigüedad: 14 años
Puntos: 0
Error: PHP utiliza un charset diferente para funciones

Tengo dos arrays para convertir caracteres especiales en entidades HTML:

Código PHP:
$specialChars    = array("¡","¢","£","¤","¥","¦","§","¨","©","ª","«","¬","*","®","¯","°","±","²","³","´","µ","¶","·","¸","¹","º","»","¼","½","¾","¿","×","÷","À","Á","Â","Ã","Ä","Å","Æ","Ç","È","É","Ê","Ë","Ì","Í","Î","Ï","Ð","Ñ","Ò","Ó","Ô","Õ","Ö","Ø","Ù","Ú","Û","Ü","Ý","Þ","ß","à","á","â","ã","ä","å","æ","ç","è","é","ê","ë","ì","í","î","ï","ð","ñ","ò","ó","ô","õ","ö","ø","ù","ú","û","ü","ý","þ","ÿ");

$htmlEntities    = array("¡","¢","£","¤","¥","¦","§","¨","©","ª","«","¬","*","®","¯","°","±","²","³","´","µ","¶","·","¸","¹","º","»","¼","½","¾","¿","×","÷","À","Á","Â","Ã","Ä","Å","Æ","Ç","È","É","Ê","Ë","Ì","Í","Î","Ï","Ð","Ñ","Ò","Ó","Ô","Õ","Ö","Ø","Ù","Ú","Û","Ü","Ý","Þ","ß","à","á","â","ã","ä","å","æ","ç","è","é","ê","ë","ì","í","î","ï","ð","ñ","ò","ó","ô","õ","ö","ø","ù","ú","û","ü","ý","þ","ÿ"); 
Al utilizar el siguiente script, el resultado es correcto:

Código PHP:
<?php
$test 
str_replace($specialChars$htmlEntities$test);
echo 
codificar($test);
?>
Resultado (correcto):

Código HTML:
Espa&ntilde;a,[6] tambi&eacute;n denominado Reino de Espa&ntilde;a, es una naci&oacute;n miembro de la Uni&oacute;n Europea, constituido en Estado social y democr&aacute;tico de Derecho y cuya forma de gobierno es la monarqu&iacute;a parlamentaria. Su territorio, con capital en Madrid, ocupa la mayor parte de la Pen&iacute;nsula Ib&eacute;rica, al que se a&ntilde;aden los archipi&eacute;lagos de las Islas Baleares (en el mar Mediterr&aacute;neo occidental) y de las Islas Canarias (en el oc&eacute;ano Atl&aacute;ntico nororiental), as&iacute; como en el norte del continente africano las plazas de soberan&iacute;a de las ciudades aut&oacute;nomas de Ceuta y Melilla, adem&aacute;s de los distritos y posesiones menores de las islas Chafarinas, el pe&ntilde;&oacute;n de V&eacute;lez de la Gomera y el pe&ntilde;&oacute;n de Alhucemas. El municipio de Ll&iacute;via, rodeado totalmente por territorio franc&eacute;s, en los Pirineos, completa el conjunto de territorios junto con la isla de Albor&aacute;n, las islas Columbretes y una serie de islas e islotes frente a sus propias costas. &copy; Copyright.
Pero si utilizo el mismo script (porque es exactamente el mismo) pero dentro de una función, el resultado es incorrecto:

Código PHP:
]<?php
function codificar($cadena) {
    
$cadena str_replace($specialChars$htmlEntities$cadena);
    return 
$cadena;
}
echo 
codificar($test);
?>
Resultado (incorrecto):

Código HTML:
España,[6] también denominado Reino de España, es una nación miembro de la Unión Europea, constituido en Estado social y democrático de Derecho y cuya forma de gobierno es la monarquÃ*a parlamentaria. Su territorio, con capital en Madrid, ocupa la mayor parte de la PenÃ*nsula Ibérica, al que se añaden los archipiélagos de las Islas Baleares (en el mar Mediterráneo occidental) y de las Islas Canarias (en el océano Atlántico nororiental), asÃ* como en el norte del continente africano las plazas de soberanÃ*a de las ciudades autónomas de Ceuta y Melilla, además de los distritos y posesiones menores de las islas Chafarinas, el peñón de Vélez de la Gomera y el peñón de Alhucemas. El municipio de LlÃ*via, rodeado totalmente por territorio francés, en los Pirineos, completa el conjunto de territorios junto con la isla de Alborán, las islas Columbretes y una serie de islas e islotes frente a sus propias costas. © Copyright.
¿Que puede estar sucediendo?
¿Algún genio sabe la solución?
  #2 (permalink)  
Antiguo 16/05/2010, 18:56
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Error: PHP utiliza un charset diferente para funciones

Busqué, y encontré esto : http://www.stumbleupon.com/group/php/forum/37465/

Bajo PHP Internal menciona que la codificacion que usa internamente PHP, deberia ser la misma con la que se guardó el archivo.

Allí mismo se menciona una función que te permite cambiar la codificacion interna de PHP

http://www.php.net/manual/es/functio...l-encoding.php

Otra opción sería de/codificar el texto devuelto por si solo. Para eso tienes utf8_encode(), si es que quieres convertir texto no-utf8 a utf8, siempre y cuando el charset de tu web sea utf8. O sino, usar utf8_decode que transforma el texto ISO88591 codificado con UTF8, a ISO88591.

http://cl.php.net/manual/en/function.utf8-encode.php
http://cl.php.net/manual/en/function.utf8-decode.php

Espero te sirva.
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #3 (permalink)  
Antiguo 16/05/2010, 19:09
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Error: PHP utiliza un charset diferente para funciones

El problema es que las variables $specialChars y $htmlEntities no existen en el ambito de la funcion y no realiza reemplazo alguno, para ello deberas usar global var1, var2, etc.:

Código PHP:
Ver original
  1. function codificar($cadena) {
  2.     global $specialChars, $htmlEntities;
  3.     $cadena = str_replace($specialChars, $htmlEntities, $cadena);
  4.     return $cadena;
  5. }
  6. echo codificar($test);

Con esto, el resultado debe ser correcto, a menos que tengas tus scripts con una codificacion y la entrada de datos con otra. Suponiendo que la entrada de datos (mysql, get, post, etc) esta en utf8 y tus scripts en iso podrias usar:

Código PHP:
Ver original
  1. utf8_decode($test);
  2. echo codificar($test);
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 16/05/2010, 19:11
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: Error: PHP utiliza un charset diferente para funciones

Dios mio... como se me pasó eso... no lo vi...
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.

Etiquetas: charset, diferente, funciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:32.