¡Hola de nuevo!
Comprobé que si es necesario un « » por cada espacio del prefijo y del sufijo del valor String que se encuentra entre etiquetas.
Juan:
Desarrollé una función de nombre
HTMLEspaciado que nos permite solucionar este tipo de casos. He aquí el código:
Código Delphi
[-]
...
implementation
{$R *.dfm}
Uses
StrUtils;
Function HTMLEspaciado (Const Cadena :String;
Const IndicadorTemporal :Char = #255) :String;
Var
Incremento, Indice, Ultimo :Integer;
CaracterEtiqueta :Char;
Procedure Espaciar;
Var
CaracterBuscado :Char;
Begin
CaracterBuscado := CaracterEtiqueta;
Repeat
If Result [Indice] = CaracterBuscado Then
If CaracterBuscado = CaracterEtiqueta Then
CaracterBuscado := ' '
Else
Result [Indice] := IndicadorTemporal
Else
If CaracterBuscado = ' ' Then
CaracterBuscado := CaracterEtiqueta;
Inc (Indice, Incremento);
Until Indice = Ultimo;
End;
Begin
Result := Cadena;
If Result = '' Then
Exit;
CaracterEtiqueta := '>';
Indice := 1;
Incremento := 1;
Ultimo := Length (Cadena);
Espaciar;
CaracterEtiqueta := '<';
Indice := Length (Cadena);
Incremento := -1;
Ultimo := 1;
Espaciar;
Result := ANSIReplaceStr (Result, IndicadorTemporal, '&' + 'nbsp;');
End;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := HTMLEspaciado (Edit1.Text);
end;
...
NOTA: En la línea «Result := ANSIReplaceStr...» separé la expresión ' ' en dos partes, para evitar un problema de interpretación HTML encontrado al exponer dicha expresión en formato de código Delphi. Para su utilización real no es necesario que dicha expresión esté separada.
La función HTMLEspaciado asume que todos los símbolos de menor que (<) y mayor que (>) de la cadena dada son delimitadores de etiquetas HTML, y ninguno de ellos parte de un valor que literalmente contenga esos símbolos, ya que para ello se utilizan los códigos especiales «<» y «>».
Realicé varias pruebas. En una de ellas introduzco la cadena
'<Etiqueta de prueba> Cien Años De Soledad </Etiqueta de prueba>' en Edit1, con dos espacios a cada lado de la subcadena 'Cien Años De Soledad'. Al oprimir el botón Button1, queda en Edit2 la cadena resultante
'<Etiqueta de prueba> Cien Años De Soledad </Etiqueta de prueba>'.
Es posible que tengamos que hacer más pruebas, o añadir funcionalidad extra a la rutina, pero creo que por lo pronto tenemos un avance importante.
Estoy considerando incluir esta función en la biblioteca Interfaz GH, porque me parece una necesidad relativamente común esto de "
espaciar" valores HTML.
Espero esto sea de utilidad, seguimos en contacto.
Al González.