Contacto | #php_para_torpes | Enlázanos | ¿Quiénes somos?
16 usuarios Online (0)
Darse de alta en la web | Recuperar password   
Inicio / Foros / PHP / Modificación de archivos xml - Problemas con UTF-8
1 respuestas recibidas | 50 visitas | Categoría PHP

Modificación de archivos xml - Problemas con UTF-8

Avatar de ejauregui
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 1 posts)

#0 Offline ejauregui Usuario 28 abr 08 (06:45)  
Estimados, estoy teniendo un inconveniente al querés modificar un archivo XML que contiene información con caracteres especiales, como acentos, etc.

Partiendo de un xml con la siguiente estructura:

[CODE]<menu>
<productos item="Cajas de cartón" link="http://www.google.com.ar/"/>
<productos item="Bolsas de polietileno" link="http://www.lanacion.com.ar/"/>
<productos item="Librería" link="http://www.ejdg.com.ar/"/>
<productos item="Panadería" link="http://www.ejdg.com.ar/blog"/>
<productos item="Fotocopiado" link="http://www.ejdg.com.ar/blog"/>
<productos item="Arías" link="asas"/>
</menu>[/CODE]

Utilizo el siguiente código PHP para añadir elementos de tipo <producto>... (puede ser que esté un poco sucio el código de tantas pruebas que hice y por no ser muy ducho con el php):

<?
$menu = Array();
function start_element($parser, $name, $attrs){
global $menu;
if($name == "productos"){
array_push($menu, $attrs);
}
}
function end_element ($parser, $name){}
$menu_string = file_get_contents("xml/menu.xml");
$menu_string = utf8_encode($menu_string);
$parser = xml_parser_create("UTF-8");
xml_set_element_handler($parser, "start_element", "end_element");
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parse($parser, $menu_string) or die("Error parsing XML document.");
$parser = utf8_encode($parser);
print "<br />";
if($_POST['action'] == "ins"){
array_push($menu, Array(
"item" => $_POST['item'],
"link" => $_POST['link']));
$menu_final = $menu;
}else if($_POST['action'] == "del"){
$menu_final = Array();
foreach($menu as $productos){
if($productos['item'] != $_POST['item']){
array_push($menu_final, $productos);
}
}
}
$write_string = "<?xml version=\"1.0\" encoding=\"utf-8\"?><menu>";
foreach($menu_final as $productos){
$write_string .= "<productos item=\"$productos[item]\" link=\"$productos[link]\" />";
}
$write_string .= "</menu>";
$fp = fopen("xml/menu.xml", "w+");
fwrite($fp, utf8_encode($write_string)) or die("Error writing to file");
fclose($fp);
print "<em>Song inserted or deleted successfully :)</em><br />";
print "<a href=\"ModifyMenu.php\" title=\"return\">Return</a>";
?>

Si bien estoy consiguiendo insertar la data que traigo del formulario, lo que me sucede es que el resto de la información que ya estaba en el XML pierde la codificación UTF-8, quedando asi:

[CODE]<menu>
<productos item="Cajas de cart�³n" link="http://www.google.com.ar/"/>
<productos item="Bolsas de polietileno" link="http://www.lanacion.com.ar/"/>
<productos item="Librer�­a" link="http://www.ejdg.com.ar/"/>
<productos item="Panader�­a" link="http://www.ejdg.com.ar/blog"/>
<productos item="Fotocopiado" link="http://www.ejdg.com.ar/blog"/>
<productos item="Ar�­as" link="asas"/>
<productos item="Polícia" link="Polícia"/>
</menu>[/CODE]

Desde ya agradezco cualquier ayuda que me puedan dar.[php][/php]

ver las codificaciones de archivo y encoding

Avatar de jurena
Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5 Nivel 5

(Nivel 5 - 729 posts)

#1 Offline jurena Usuario 28 abr 08 (09:25)  
No me hagas mucho caso, pues nada de XML he usado, pero me da la impresión de que el problema es de codificación y yo me he encontardo algo parecido cuando he guardado como ANSI, es decir, ISO-8859-1, un archivo PHP escrito con caracteres UTF-8. Y me recuerda a otros problemas parecidos con la base de datos. Por lo que te diré mi opinión.
No entiendo qué necesidad hay de usar utf8_encode o utf8_decode, si el archivo XML está guardado como utf-8 (con el editor que uses; hasta el block de notas permite esa codificación) y además tiene la entiqueta <?xml version="1.0" encoding="UTF-8"?>
Luego el archivo php (y también si hay alguno html donde muestras los datos) debe igualmente haber sido guardado como utf-8 con el editor que uses y tener el meta <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
Creo que si revisas con qué codificación has guardado los archivos y añades los meta no tendrás demasiados problemas, aunque, como te he dicho, no he usado XML todavía.
He leído que para el frame System.useCodepage = true; pero no sé si será necesario. Lo que me resulta sospechoso es el uso de utf8_encode y utf8_decode, creo que innecesarios si la codificación del archivo y la de la visualización son utf-8.
Prueba y nos dices...

A pesar de todo, es posible que si tecleaste con otra codificación el archivo XML, ahora al cambiar la codificación veas signos extraños. Pues bien, los vuelves a teclear con la codificación UTF-8. Imagina que te trajeras muchos datos de otro lugar escritos con otra codificación; solo en ese caso usaría yo utf8_encode, etc. Pero si los vas a teclear tú, establece la codificación y encoding utf-8 y pruébalo.

Responder mensaje

Para poder participar debes estar registrado e identificado. Si no estás registrado como usuario de PHP-Hispano, :: Registrar ::
Login / Password   

Web alojada en Zilos

php-hispano.net 2002 - 2008 | XHTML 1.0
Datos Legales | Webmaster