Problemas con UTF-8 al parsear XML
Tengo un archivo PHP que me permite la edición de un documento xml, al que puedo agregale items o borrarlos. Hasta ahí vamos bien.
Mi problema surge cuando hago una modificación en el xml y toda aquella información que ya estaba en el xml y que contenía algún carácter especial, como acentos, ñ, etc; se cambia.
Estuve probando varias cosas para que respete el UTF-8, que si bien me lo respeta cuando inserto un nuevo item no lo hace en el parseo del resto de la data.
Desde ya muchas gracias.
<!--r-->$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");
$parser = xml_parser_create();
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.");
print "
";
if(
Mi problema surge cuando POST['action'] == "ins"){
array_push($menu, Array(
"item" =>
Mi problema surge cuando POST['item'],
"link" =>
Mi problema surge cuando POST['link']));
$menu_final = $menu;
}else if(
Mi problema surge cuando POST['action'] == "del"){
$menu_final = Array();
foreach($menu as $productos){
if($productos['item'] !=
Mi problema surge cuando POST['item']){
array_push($menu_final, $productos);
}
}
}
$write_string = "
<!--l version=\"1.0\" encoding=\"utf-8\-->";
foreach($menu_final as $productos){
$write_string .= "
";
}
$write_string .= "";
$write_string_car = utf8_encode($write_string);
$fp = fopen("xml/menu.xml", "w+");
fwrite($fp, $write_string_car) or die("Error writing to file");
fclose($fp);
print "Song inserted or deleted successfully :)
";
print "Return";
?>
Mi problema surge cuando hago una modificación en el xml y toda aquella información que ya estaba en el xml y que contenía algún carácter especial, como acentos, ñ, etc; se cambia.
Estuve probando varias cosas para que respete el UTF-8, que si bien me lo respeta cuando inserto un nuevo item no lo hace en el parseo del resto de la data.
Desde ya muchas gracias.
<!--r-->$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");
$parser = xml_parser_create();
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.");
print "
";
if(
Mi problema surge cuando POST['action'] == "ins"){
array_push($menu, Array(
"item" =>
Mi problema surge cuando POST['item'],
"link" =>
Mi problema surge cuando POST['link']));
$menu_final = $menu;
}else if(
Mi problema surge cuando POST['action'] == "del"){
$menu_final = Array();
foreach($menu as $productos){
if($productos['item'] !=
Mi problema surge cuando POST['item']){
array_push($menu_final, $productos);
}
}
}
$write_string = "
<!--l version=\"1.0\" encoding=\"utf-8\-->";
foreach($menu_final as $productos){
$write_string .= "
";
}
$write_string .= "";
$write_string_car = utf8_encode($write_string);
$fp = fopen("xml/menu.xml", "w+");
fwrite($fp, $write_string_car) or die("Error writing to file");
fclose($fp);
print "Song inserted or deleted successfully :)
";
print "Return";
?>
1 respuesta
Respuesta de zagalet
1