Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lendadomato

Url Amigável em ASP Clássico sem ISAPI Rewrite

Recommended Posts

Olá todos, fiz um sistema de url amigável sem o uso do ISAPI Rewrite mas com algumas limitações, não tenho muito conhecimento em programação mas com ajuda de muitos aqui do forum consegui chegar a um resultado satisfatório, aí vem uns e perguntam: mas você pode usar o componente ISAPI-Rewrite que resolve o problema, mas o problema é que eu não posso migrar de servidor pois nem todos tem instalado todos componentes que uso em meus sites, e como tenho sites com mais de 20.000 fotos cadastradas com resolução de 1.200x800 pixels sem contar as miniaturas, então daria um trabalho imenso para migrar tudo isso e mais um pouco.

Então vamos vamos à parte que mais deu trabalho que foi a codificação de caracteres, já faz 15 dias que eu estou tentando de tudo para acertar os benditos acentos, já salvei as páginas com codificação utf-8, iso-8859-1, Latim 1, ASCII.

Já mudei no banco de dados conforme a codificação das páginas, já fiz de tudo e nada, então estou postando todo trabalho para que alguém teste e encontre uma solução:

 

INSTRUÇÕES:

1 - coloque endereço completo em todas âncoras das páginas que levam a exibição dos dados, incluindo o endereço do arquivo .css
2 - crie uma página idêntica à página que recebe os dados, exemplo(produtos.asp) para (produtos2.asp)
3 - coloque o endereço completo de de url em todos os links de todas as páginas, assim como no arquivo .css.
4 - crie pastas com os nomes de todas sessões e/ou categorias existentes separados por (-) ex:(receitas-com-aves) em seu site e dê as devidas permissões de escrita e leitura.
5 - crie uma tabela no bancos de dados chamada "sitemaps" contendo os campos ("id" AUTO_INCREMENT) e ("url" longtext) com as configurações: CHARSET=utf8 COLLATE=utf8_general_ci .
6 - lembre-se de setar as permissões onde os arquivos serão gravados assim como seu seu arquivo sitemap.txt .
7 - crie uma página com o nome "criar-pagina.asp" .

Obs: o problema é que eu acho que não serve para lojas virtuais.


vamos então, abra o arquivo que recebe os dados(produtos.asp) e coloque as instruções abaixo da consulta que mostra os dados:

'Aqui eu informo a sessão do produto substituindo os espaços por traço, eu acho que não preciso mostrar as outras variáveis.

'Aqui eu fiz uma consulta no banco e recuperei a sessão o produto que estava cadastrado.
    sessaoMenu = replace(LCase(strNomeSessao)," ","-")  

    If Request.QueryString("produto") <> "" Then

'Informe todas variáveis do produto na url arquivo (produtos2.asp) que é a cópia criada por você, no meu caso eu estou passando outras variáveis pela url porque preciso delas para compor as metas tags do meu cabeçalho.
    srturl =  ("http://www.seusite.com.br/produtos2.asp?produto="&intProdID&"&nome="&strNomeProduto&"&sessao="&sessaoMenu&"&tag="&strTag&"&descricao="&strDescricao&"&imagem="&strImagem&"")

'Aqui redireciona para a página criar-pagina.asp passando as variáveis informadas acima.
Response.Redirect ("criar-pagina.asp?SURL="&srturl&"")

Else





'Fechar a condição no final da página.
   end if 

criar-pagina.asp

<%

Dim strProdID 
Dim strNomeProduto 
Dim StrSURL
Dim strSessao
Dim strTag
Dim strNota
Dim strImagem
Dim CAcento
Dim SAcento
Dim titulo
Dim pagina
Dim caminho
Dim link
Dim strSite
Dim strCodigo
Dim codigo
Dim xmlhttp
Dim GRAVAR
Dim FSO
Dim htmlspecialchars_decode
Dim strEnderecoPagina
Dim sitemaps
Dim link_sitemap
Dim caminho_sitemap
Dim ArqTxt

'Função para remover acentos.

   Function TirarAcento(Palavra)
   CAcento = "àáâãäèéêëìíîïòóôõöùúûüÀÁÂÃÄÈÉÊËÌÍÎÒÓÔÕÖÙÚÛÜçÇñѺª"
   SAcento = "aaaaaeeeeiiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN"
   Texto = ""
   If Palavra <> "" then
           For X = 1 To Len(Palavra)
               Letra = Mid(Palavra,X,1)
               Pos_Acento = InStr(CAcento,Letra)
               If Pos_Acento > 0 Then Letra = mid(SAcento,Pos_Acento,1)
               Texto = Texto & Letra
           Next
           TirarAcento = Texto
   End If
   End Function  

'Função para decodificar o conteúdo.
    Function htmlspecialchars_decode(someString)
    htmlspecialchars_decode = replace(replace(replace(replace(someString, "&", "&"), ">", ">"), "<", "<"), """, """")
    End Function


' ------------------------------------------------------------------------------

'Recupera as variáveis.
          strNomeProduto = Request.QueryString("nome")
          strSURL = Request.QueryString("SURL")
          strSessao = Request.QueryString("sessao")
          strTag = Request.QueryString("tag")
          strDescricao = Request.QueryString("descricao")
          strImagem = Request.QueryString("imagem")

'Tratando as variáveis com replace para substituir espaços por traço e em letras minúsculas, e removendo acentos.
          strNomeProduto = replace(TirarAcento(LCase(strNomeProduto))," ","-")
          strSessao = replace(TirarAcento(LCase(strSessao))," ","-")

'Informe aqui o endereço do seu site, não remova a barra.
          strSite = "http://www.seusite.com.br/"

'Aqui vamos montar o nome da nova página com a extensão html.
          titulo = strNomeProduto&".html"

'Aqui informamos a pasta onde será gravada a nova página.
          pasta = strSessao&"/"&titulo

'Aqui informamos o link da página a ser acessada.
         link =  strSURL&"&nome="&strNomeProduto&"&descricao="&strDescricao&"&tag="&strTag&"&imagem="&strImagem


' ------------------------------------------------------------------------------

'Aqui acessamos a página informada e pegamos o código fonte dela.
Set xmlhttp = Server.CreateObject("Microsoft.XMLHTTP")
xmlhttp.Open "GET",link, False
xmlhttp.setRequestHeader "ContentType","text/html"
xmlhttp.setRequestHeader "charset","utf-8"       'use a codificação que melhor lhe atender
xmlhttp.setRequestHeader "Encoding","utf-8"      'use a codificação que melhor lhe atender
xmlhttp.Send
strCodigo =  xmlhttp.ResponseText
codigo = Server.HTMLEncode(strCodigo)


' ------------------------------------------------------------------------------

'Aqui criamos o objeto para gravar a página na pasta conforme sua sessão.
   Set FSO = Server.CreateObject("Scripting.FileSystemObject") 
   caminho = Server.MapPath(pasta)
   
   Set GRAVAR = FSO.CreateTextFile(caminho,true)

'Aqui gravamos todo código fonte dentro da nova página.
   gravar.write htmlspecialchars_decode(codigo)
   gravar.close

' ------------------------------------------------------------------------------

'Aqui informamos o endereço completo da nova página.
    strEnderecoPagina = strSite&pasta

'Gravamos o endereço da nova página no banco de dados,e verificamos se já existe o mesmo nome gravado, OBS. coloque um include que faz a conexão com seu banco de dados.
   Set sitemaps = abredb.Execute("SELECT * FROM sitemaps WHERE url='"& strEnderecoPagina &"';")

   if sitemaps.eof and sitemaps.bof then
     link_sitemap = strEnderecoPagina

     sitemaps = "INSERT INTO sitemaps (url) VALUES ('"&link_sitemap&"')"
     abredb.execute(sitemaps)

'Com a mesma condição vamos gravar um novo link no arquivo sitemap.txt.
     Set FSO = Server.CreateObject("Scripting.FileSystemObject") 
     caminho_sitemap = "c:/domains/seusite.com.br/wwwroot/sitemap.txt"

'O parâmetro forReading é utilizado somente para leitura.
     Const forReading = 1, forWriting = 2, forAppending = 8

'Instancia o objeto FSO.
    Set Fso = CreateObject("Scripting.FileSystemObject")

'Abre o arquivo com o método OpenTextFile.
    Set ArqTxt = Fso.OpenTextFile(caminho_sitemap,8,True)

'Arquivo aberto, escreve no arquivo.
    ArqTxt.WriteLine link_sitemap

'Fecha o arquivo com o método Close.
    ArqTxt.Close

'Destrói o objeto. 
    Set ArqTxt = nothing


  else

  strEnderecoPagina = strEnderecoPagina

  end if

  sitemaps.close
  sitemaps.nothing

' ------------------------------------------------------------------------------

'Pronto, fazemos um redirecionamento para a página recém criada.
Response.Redirect strEnderecoPagina 

%>

Este sistema além de gravar uma página em html, ele grava cada link criado no banco de dados e grava também uma nova linha no arquivo sitemap.txt sem duplicidade, então a cada clique que o visitante der vai acontecer todo esse processo, e se a página já existir ele vai sobrescrever a mesma para atualizar caso seja um site com includes, mas não vai gravar novo link no sitemap e nem no banco.

Bom, valeu pela força de todos e se alguém puder ajudar finalizar esse projeto eu agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente na hora de redirecionar usar o Server.URLEncode, mas geralmente deixando a codificação como UTF-8 (o mais indicado) ou dependendo de como criou o bd e no seu editor pode ser ISO-8859-1 já resolve, mas veja no seu Conjunto de caracteres se esta UTF-8 Unicode (utf8) e no Collation de conexão do seu bd se esta como utf8_unicode_ci

 

Vc também pode mudar o Charset, coloque:

 

<% Response.Charset="ISO-8859-1" %>

veja se seu Cabecalho HTTP-Equiv , Content Type Estiver Setado Pra iso-8859-1

 

ou UTF-8

 

se tiver usando o DW faça assim:

 

10366162_731589560218176_543485511873437

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo xanburzum, para ver o resultado da página criada acesse o site de teste, veja que a acentuação está toda correta antes de criar a página, mas quando ela é criada a coisa muda toda, mas o conteúdo que vem do banco de dados está correto, somente os textos dos includes que não vem certos, meu banco está ok como codificação UTF-8 Unicode (utf8) e no Collation utf8_unicode_ci, tentei redirecionar usando o Server.URLEncode e a página é gravada toda em branco:

http://www.receitaecozinha.com.br/

abaixo a página original que é visitada:

http://www.receitaecozinha.com.br/produtos5.asp?produto=3&receita=Strogonoff%20de%20frango&tag=Strogonoff,fil%E9,frango,milho%20verde,caldo,galinha,Cemil,creme%20de%20leite,%20cubos&nota=Pr%E1tico+e+saboroso,+o+strogonoff+de+frango+%E9+simples+de+fazer+e+todo+mundo+gosta.+Meu+filho+n%E3o+gosta+de+champignon,+por+isso+esse+%E9+feito+com+milho+verde.&impeq=strogonoff-frango.jpg

 

veja no código fonte que a acentuação está correta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

todos arquivos estão salvos como ASCII, se eu salvo como utf-8 fica tudo certo também, o problema é que as metas tags não acentuam, então vou salvar todos eles como utf-8 novamente e gravar mais um registro no banco pois os dados que foram gravados foram com as páginas em ASCII.


agora está tudo como utf-8 até o banco de dados, eu reparei que somente os dados do campo detalhe que são inseridos pelo textarea do Ckeditor é que estão certos, os outros que são do tipo input estão errados, mesmo que no banco estejam todos com a mesma codificação do campo detalhe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

descobri o que está acontecendo, eu esbarrei novamente naquele mesmo problema do Dundas.Upload.2, mas vou ver qual tratamento a variável da descrição está recebendo e tratar as outras com o mesmo processo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

provavelmente o Dundas esta vindo com outro Charset

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo Xanburzum, eu tentei de tudo e encontrei aqui no forum uma postagem para tratar caracteres utf-8, mas vou ter que mudar todas variáveis mas vai valer à pena, eu removi o "option explicit" do início do código e funcionou que é uma beleza, amanhã faço as alterações e posto aqui se resolveu tudo, segue o link do post para tratar o utf-8:

http://forum.imasters.com.br/topic/431268-converter-string-no-formato-utf-8-para-iso-8859-1-antes-de-gravar-no-banco/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza Tarcízio, estamos no aguardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

não deu certo a função, então vou usar um replace para remover os acentos nas metas tags, então eu acho que o Google consiga ler o conteúdo com os acentos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde a todos, como este post ainda está aberto venho para agradecer a força para fazer esse sistema, o pessoal da minha hospedagem me migrou de servidor sem autorização e fiquei todo feliz porque talvez no novo servidor teria o componente ISAP-Rewrite e quando fui ver não tinha nem a metade dos componentes que uso para rodar meus sites, mas o que me deixou feliz foi que o servidor agora é Windows Server 2012 com IIS 8 atualizando o equipamento (incremento de 2700% na capacidade de processamento) , então resolvi usar esse sistema em outro site dinâmico e para minha surpresa (em 3 dias o Google indexou mais de 600 urls) sem ter que enviá-las para o índice usando a "Ferramentas para Webmasters", segue abaixo o link do site que está rodando esse sistema com sucesso, ah, fiz uma gambiarra para converter as páginas com paginação também, obrigado mais uma vez:

Lenda do Mato

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.