Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/09/2009, 03:40
angel9484
 
Fecha de Ingreso: mayo-2009
Mensajes: 41
Antigüedad: 15 años
Puntos: 1
acerca del encoding de xml_parser_create()

Buenas, tengo un problemilla con esta función, el caso es que si pongo:
xml_parser_create("ISO-8859-1")
Me hace aparentemente bien las cosas con los acentos.
El problema me viene con algunos caracteres algo mas especiales como "&".
He estado mirando y al parecer el ISO-8859-15 me viene perfecto para mi fín, pero esta funcion no la soporta, al menos en el php5 que tengo en el hosting
Hay algun otro charset que sea compatible con esos caracteres y ademas sea soportado por esta funcion?
o por el contrario existe otro parser integrado en php que pueda incluir este charset?
En principio está apañado cambiando el & por un Y, pero claro.. no es lo mismo, jeje
Un saludo!

Buscando por internet, encontré esto.
Código php:
Ver original
  1. <?php
  2. $rx = '/<?xml.*encoding=['"](.*?)['"].*? >/m';
  3. if (preg_match($rx, $source, $m))
  4. {
  5.  $encoding = strtoupper($m[1]);
  6. }
  7. else
  8. {
  9.  $encoding = "UTF-8";
  10. }
  11.  
  12. if($encoding == "UTF-8" ||
  13. $encoding == "US-ASCII" ||
  14. $encoding == "ISO-8859-1")
  15. {
  16.  $parser = xml_parser_create($encoding);
  17. }
  18. else
  19. {
  20. if(function_exists('mb_convert_encoding'))
  21. {
  22.     $encoded_source = @mb_convert_encoding($source, "UTF-8", $encoding);
  23. }
  24.  
  25. if($encoded_source != NULL)
  26. {
  27.     $source = str_replace (
  28. $m[0],
  29. '< ?xml version="1.0" encoding="utf-8"? >',
  30. $encoded_source);
  31.  
  32. }
  33.  
  34.  $parser = xml_parser_create("UTF-8");
  35. }
  36. xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8");
  37. ?>
He puesto un espacio entre los ?> por tema que se lia el highlight este
pero realmente no se como con esto consigue soportar el charset 15 como dice en la web ( vnffc.nhatviet.net/forums/showthread.php?t=510 )

Última edición por angel9484; 09/09/2009 a las 03:48