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:
Código:
<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>
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):
Código 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:
Código:
<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>
Desde ya agradezco cualquier ayuda que me puedan dar.