Preciso criar um site que contenha artigos e gostaria de criar URLs amigáveis, como o URL da página com
Título: Artigo Teste
deve tornar-se: http://www.example.com/articles/article_test
.
É claro que preciso remover alguns caracteres do título, como ?
or #
, mas não tenho certeza de quais remover.
Alguém pode me dizer quais caracteres são seguros para manter?
url
friendly-url
Paulo
fonte
fonte
Respostas:
Para citar a seção 2.3 da RFC 3986 :
"Os caracteres permitidos em um URI, mas que não têm um objetivo reservado, são chamados sem reserva. Eles incluem letras maiúsculas e minúsculas, dígitos decimais, hífen, ponto, sublinhado e til."
Observe que o RFC 3986 lista menos sinais de pontuação reservados que o RFC 2396 mais antigo .
fonte
ç
eõ
?post-title-with-%C3%A7-and-%C3%B5
, mas ainda será exibida na barra de localização do usuário comopost-title-with-ç-and-õ
.Há dois conjuntos de caracteres que você precisa observar: reservado e não seguro .
Os caracteres reservados são:
Os personagens geralmente considerados inseguros são:
Eu posso ter esquecido um ou mais, o que me leva a ecoar a resposta de Carl V. A longo prazo, provavelmente é melhor usar uma "lista branca" de caracteres permitidos e depois codificar a sequência em vez de tentar ficar a par dos caracteres que não são permitidos pelos servidores e sistemas.
fonte
#
é um caractere reservado usado para indicadores em uma página específica, criado por ter um elemento HTML com um atributo de nome ou atributo de id correspondente (sans-#
symbol).~
é inseguro. Você tem certeza que é?É melhor manter apenas alguns caracteres (lista de permissões) em vez de remover determinados caracteres (lista negra).
Tecnicamente, você pode permitir qualquer caractere, desde que o codifique corretamente. Mas, para responder no espírito da pergunta, você deve permitir apenas esses caracteres:
Tudo o resto tem um significado potencialmente especial. Por exemplo, você pode pensar que pode usar +, mas pode ser substituído por um espaço. & também é perigoso, especialmente se estiver usando algumas regras de reescrita.
Como nos outros comentários, consulte os padrões e especificações para obter detalhes completos.
fonte
Sempre seguro
Estes são seguros (em teoria / especificação), basicamente em qualquer lugar, exceto no nome de domínio.
Codifique por cento tudo o que não estiver listado e você estará pronto.
Às vezes seguro
Somente seguro quando usado em componentes de URL específicos; use com cuidado.
Never Safe
De acordo com a especificação do URI (RFC 3986), todos os outros caracteres devem ser codificados em porcentagem. Isso inclui:
Se a compatibilidade máxima for uma preocupação, limite o conjunto de caracteres para AZ az 0-9 - _.
(com pontos apenas para extensões de nome de arquivo).
Mantenha o contexto em mente
Mesmo se válido por especificação, um URL ainda pode ser "inseguro", dependendo do contexto. Como um arquivo: /// URL que contém caracteres de nome de arquivo inválidos ou um componente de consulta que contém "?", "=" E "&" quando não usado como delimitador. O tratamento correto desses casos geralmente depende de seus scripts e pode ser contornado, mas é algo a ter em mente.
fonte
=
não é seguro para consultas. Por exemplo, o FIQL aceita sinais de igual e se descreve como "amigável ao URI" e "otimizado e destinado ao uso no componente de consulta". Na minha interpretação, o RFC 3986 permite explicitamente "=", "&", "+" e outros em consultas.params.toString() // "key=730d67"
" (3) Manual do PHP, http-build-query: "Gere uma string de consulta codificada em URL. [...] O exemplo acima mostrará:0=foo&1=bar[...]
"(4) J. Starr, Perishable Press:" Ao criar páginas da Web, muitas vezes é necessário adicionar links que exijam cadeias de consulta parametrizadas. "Olhando para RFC3986 - Identificador Uniforme de Recursos (URI): sintaxe genérica , sua pergunta gira em torno do componente de caminho de um URI.
Citando a seção 3.3, os caracteres válidos para um URI
segment
são do tipopchar
:Que se divide em:
Ou em outras palavras: Você pode usar qualquer caractere (não-controle-) da tabela ASCII , exceto
/
,?
,#
,[
e]
.Esse entendimento é apoiado pelo RFC1738 - URLs (Uniform Resource Locators) .
fonte
-
e;
é seguro, é isso que minha resposta e a RFC afirma claramente.não reservado = ALPHA / DIGIT / "-" / "." / "_" / "~"
fonte
No contexto que você descreve, suspeito que o que você está realmente tentando fazer é algo chamado de 'lesma de SEO'. A melhor prática conhecida geral para aqueles é:
Assim, como exemplo, um artigo intitulado "O uso de! @% $ * Para representar palavrões nos quadrinhos" receberia uma porção de "uso-representa-palavrões-quadrinhos".
fonte
O formato para um URI é definido no RFC 3986 . Veja a seção 3.3 para detalhes.
fonte
De uma perspectiva de SEO, os hífens são preferidos aos sublinhados. Converta em minúsculas, remova todos os apóstrofos e substitua todas as seqüências de caracteres não alfanuméricas por um único hífen. Apare o excesso de hífens no início e no final.
fonte
Eu tive um problema semelhante, queria ter urls bonitos e cheguei à conclusão de que tenho de permitir apenas letras, dígitos e _ e urls. Tudo bem, então eu escrevi um bom regex e percebi que ele reconhece que todos os caracteres UTF8 não são letras no .NET e foi ferrado. Este parece ser um problema conhecido para o mecanismo de regex do .NET. Então eu cheguei a esta solução:
fonte
Achei muito útil codificar meu URL para um URL seguro quando eu retornava um valor através do ajax / php para um URL que era lido pela página novamente.
Saída PHP com codificador de URL para o caractere especial &
Espero que alguém ache meu pequeno extrato de código útil! :)
fonte
Acho que você está procurando algo como "Codificação de URL" - codificando um URL para que seja "seguro" usar na Web:
Aqui está uma referência para isso. Se você não deseja caracteres especiais, basta remover os que requerem codificação de URL:
http://www.w3schools.com/TAGS/ref_urlencode.asp
fonte
Entre 3-50 caracteres. Pode conter letras minúsculas, números e caracteres especiais - ponto (.), Traço (-), sublinhado (_) e com a taxa (@).
fonte