PHP - Modificación de archivos xml - Problemas con codif

 
Vista:

Modificación de archivos xml - Problemas con codif

Publicado por Eugenio (1 intervención) el 28/04/2008 06:22:30
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):

[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>";
?>[/PHP]

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.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder