Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/04/2008, 22:12
ejauregui
 
Fecha de Ingreso: abril-2008
Mensajes: 1
Antigüedad: 16 años, 11 meses
Puntos: 0
Exclamación Modificación de archivos xml - Problemas con codificación UTF-8

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($parserXML_OPTION_CASE_FOLDING0);
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($fputf8_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.