Problemas con Acentos, Eñes, etc... Por símbolos raros ¿Problema de PHP?

Andrés Ruz Salinas andres en efusion.tv
Mar Sep 5 19:15:38 CLT 2006


Hola,

	Hace un tiempo programé una aplicación web en PHP 4.3, Apache 2 y
Postgresql 7.4. Hace poco tube problemas con mi servidor gracias a un hackeo
de este y ahora esta corriendo CentOS 4.3. El problema es que ahora las
páginas que escribí sin usar los códigos html de caractéres especiales
(á=á é=é etc.) ahora se me ven con un símbolo de pregunta. Eso
no es todo. Ahora he repasado mucho código HTML para q se vea sin esos
símbolos extraños y funciona bien. El problema ahora es que los formularios
en donde envío textos para ser procesados no los puedo interpretar y
modificar a mi gusto haciendo reemplazo de caractéres por que por alguna
razón ninguna de las funciones (str_replace, preg_replace) hace su tarea con
los caractéres especiales
("Ü","à","á","è","é","ì","í","ò","ó","ù","ú","ü","ñ","Ñ") ya que simplemente
no los detecta, o sea, para mas detalles aquí va un ejemplo:


### INICIO

// La idea de este código es reemplazar lo que coincide con el arreglo
"$arr_CaractFinal" por su contraparte en el arreglo "$arr_CaractEspecial".

$arr_CaractFinal 	   = array(0=>'!', 1=>'"', 2=>'#', 3=>'$', 4=>'&',
5=>"'", 6=>'*', 7=>'+', 8=>',', 9=>'-', 10=>'.', 11=>'/', 12=>':', 13=>';',
14=>'<', 15=>'=', 16=>'>', 17=>'?', 18=>'@', 19=>'[', 20=>']', 21=>'^',
22=>'_', 23=>'`', 24=>'~', 25=>'¿', 26=>"Ü", 27=>"à", 28=>"á", 29=>"è",
30=>"é", 31=>"ì", 32=>"í", 33=>"ò", 34=>"ó", 35=>"ù", 36=>"ú", 37=>"ü",
38=>"ñ", 39=>"Ñ");

$arr_CaractEspecial    = array(0=>"%21", 1=>"%22", 2=>"%23", 3=>"%24",
4=>"%26", 5=>"%27", 6=>"%2A", 7=>"%2B", 8=>"%2C", 9=>"%2D", 10=>"%2E",
11=>"%2F", 12=>"%3A", 13=>"%3B", 14=>"%3C", 15=>"%3D", 16=>"%3E", 17=>"%3F",
18=>"%40", 19=>"%5B", 20=>"%5D", 21=>"%5E", 22=>"%5F", 23=>"%60", 24=>"%7E",
25=>"%BF", 26=>"%DC", 27=>"%E0", 28=>"%E1", 29=>"%E8", 30=>"%E9", 31=>"%EC",
32=>"%ED", 33=>"%F2", 34=>"%F3", 35=>"%F9", 36=>"%FA", 37=>"%FC", 38=>"%F1",
39=>"%D1");

// este texto se supone que yo lo recibo desde un formulario, aqui lo puse
en duro y de ninguna forma funciona.
$string = "IPC DE JULIO: 0,5% El Indice de Precios al Consumidor (IPC)
registra una variación mensual de 0,5% en julio, con especial incidencia de
las alzas en los sectores Vivienda y Transporte. En lo que va del año el
"costo de la vida" llega a 2,6% y a 3,8% en los 12 meses.";

// -- Forma Nº1 --
$string = str_replace($arr_CaractFinal, $arr_CaractEspecial, $string); // 
// -- Forma Nº1 --


// -- Forma Nº2 --
for ($x=0;$x<strlen($string);$x++) {
	$clave = array_search($string{$x}, $arr_CaractFinal);
	if (gettype($clave)=="integer") {
		$string{$x} = $arr_CaractEspecial[$x];
	}
}
// -- Forma Nº2 --

### FIN


Las formas que he mostrado no me funcionan y cuando estaban en el otro
server si funcionaban. Aún no he encontrado nada relacionado con algo que
tenga que ver con la nueva versión que uso de PHP(PHP Version 5.1.4) o con
apache(Apache/2.0.52 (CentOS)).

Ahora como decía en un inicio, ## sólo tengo problemas de conversión con
algunos caractéres ("Ü","à","á","è","é","ì","í","ò","ó","ù","ú","ü","ñ","Ñ")
##

He probado otras cosas pero así y todo no me funciona y lo más raro es que
cuando imprimo el texto recibido desde el formulario, el texto no cambia en
nada y tampoco me muestra los simbólos por los cuales me los reemplaza como
cuando hago un -- ej: echo "variación"; --

Aún no encuentro el problema.

Ojalá alguien me ayude (como siempre) :S 
Grax

Andrés Ruz




Más información sobre la lista de distribución Linux