On Thu, 22 Mar 2001, Cristian Thiago Moecke wrote:
> Preciso fazer um script que trate mensagens de email que são formadas
> por Formulários HTML de Homepages. (...) O que eu quero é um script
> simples que apaneas substitua %E9 por é e assim por diante. Não
> precisa ser nada automatico, (...) O que aconteceu é que um webmaster
> fez uma pagina de um seminario ao qual devem ser enviados textos pelos
> interessado em participar. Dai os interessados mandam o texto via um
> formulario html

Talvez valha a pena a empresa pagar um treinamento para este webmaster, ou
a alguém que decide este tipo de coisa, para evitar este tipo de má
escolha no futuro.

Fiz um script rapidinho (em awk) que faz o que você quer. Chame-o passando
como parâmetro o nome de um arquivo no formato url-encoded que você
recebeu, e ele devolverá na saída padrão o texto convertido, trocando os
"+" por " " e os códigos hexa precedidos de % pelos caracteres
equivalentes. Teste aí, e melhore o que precisar. 

Fiz em awk pra ver se era possível (e descobri que era), mas provavelmtne
o mesmo script em perl não passaria de 5 linhas...

Segue o código fonte:

#!/bin/sh
# urldecode.sh - retira codificação URL.
# - este programa foi escrito como um exercício.
# - provavelmente pode ser muito melhorado - fique `a vontade, mas me
#   avise
# - uma implementação em linguagem mais apropriada (perl, php...) 
#   provavelmente teria menos de 5 linhas...
# Augusto Campos - [EMAIL PROTECTED] - www.linux.trix.net
 
awk '
function chr(c)                  # decimal -> char
{ return sprintf("%c", c + 0) }

function decimal(h)              # hexa -> decimal
{ __c="0123456789ABCDEF"
  h=toupper(h)
  return (index(__c,substr(h,1,1))-1)*16+index(__c,substr(h,2,1)-1);
}

function acentos(s1)             # %XX -> char
{ s2=""
  while (index(s1,"%")) {
    a=index(s1,"%");
    s2=s2 substr(s1,1,a-1) chr(decimal(substr(s1,a+1,2)));
    s1=substr(s1,a+3);
  }
  if (length(s1)) s2 = s2 s1
  return s2
}

{
  s1=$0
  gsub("+"," ",s1);
  print acentos(s1);
}
' $1


Boa sorte!
Augusto

-- 
Augusto C. Campos  -  [EMAIL PROTECTED]  | [EMAIL PROTECTED]
TRE-SC - Rede e Comunicacao de dados         | www.linux.trix.net 
Os fins justificam os mails                  | [EMAIL PROTECTED]


Assinantes em 26/03/2001: 2166
Mensagens recebidas desde 07/01/1999: 106663
Historico e [des]cadastramento: http://linux-br.conectiva.com.br
Assuntos administrativos e problemas com a lista: 
            mailto:[EMAIL PROTECTED]

Responder a