Ver Mensaje Individual
  #4 (permalink)  
Antiguo 15/01/2009, 07:06
Avatar de Muzztein
Muzztein
 
Fecha de Ingreso: agosto-2002
Ubicación: Hangar 18
Mensajes: 1.703
Antigüedad: 22 años, 8 meses
Puntos: 16
Respuesta: Cáracteres ANSI

una vez me paso algo similar con un XML que venia con un texto sacado de WORD y era imposible mostrarlo por pantala.
Intente CDATA y todo tipo de trucos (ISO, CHAR SETS, etc) y no pude sacarmelo de encima.

En definitiva termine por hartarme y en vez de sacar el caracter que me molestaba, me hize una funcion que solo me dejaba los caracteres que yo deseaba y asi workarrondie el problema.

La solucion a este problema quizas tenga una version mas digna, pero lo que hize fue lo siguiente:

Funcion que soluciona el problema

Código PHP:
function deja_solo_caracteres_permitidos(manga_caracteres_permitidos,cadena_a_limpiar)
    
on error resume next
    dim x
,str,salida,letra,manga,cantidad
    deja_solo_caracteres_permitidos 
false
    
if cadena_a_limpiar false then  exit function
    if 
manga_caracteres_permitidos false then 
        manga 
=    UCASE("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_")
    else
        
manga manga_caracteres_permitidos
    end 
if
                
    
str cadena_a_limpiar    
    salida 
str 
    cantidad 
len(cadena_a_limpiar)
    for 
1 to cantidad
        letra 
Mid(str,x,1)
        if 
checa_existencia(manga,letra) = false then
            salida 
=  replace(salida,letra,"")
        
end if
    
next
    
if err.number 0 then 
        deja_solo_caracteres_permitidos 
salida
    end 
if
    
err.Clear
    
exit function     
end function 
Funciones requeridas para la anterior

Código PHP:
function checa_existencia(cadena,patron)
  
dim regexmatchmatches    ,x
  set regex 
= new regexp            
  regex
.pattern fixER(patron)            
  
regex.ignorecase false    
  regex
.global = true        
  set matches 
regex.execute(cadena)    
      for 
each match in matches    
      x 
1
    next
    
if 1 then
        checa_existencia 
true
    
else
        
checa_existencia false
    end 
if
end function

function 
fixER(x)
    
SELECT CASE x
    
CASE "?"         fixER "\?"
    
CASE "."         fixER "\."        
    
CASE "\"         fixER = ""            
    CASE "
*"         fixER = "*"                
    CASE ELSE 
         fixER = x
    END SELECT
end function 

y se usa asi

dim cadena,manga,x

rem donde manga es un STR que contiene todos los caracteres que quieres permitir y cadena es el texto que deseas limpiar.

cadena = "hola como estan todos"
manda = "aeiou "
x = deja_solo_caracteres_permitidos(manga,cadena)

rem el resultado en X seria "oa oo ea oo"


Espero te sirva