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]