Muszę stworzyć stronę internetową, która będzie zawierała artykuły i chciałbym stworzyć dla niej przyjazne adresy URL, na przykład adres URL strony z
Tytuł: Test artykułu
powinny stać się: http://www.example.com/articles/article_test
.
Oczywiście muszę usunąć niektóre znaki z tytułu, takie jak ?
lub #
, ale nie jestem pewien, które z nich usunąć.
Czy ktoś może mi powiedzieć, jakie postacie można bezpiecznie zachować?
url
friendly-url
Paulo
źródło
źródło
Odpowiedzi:
Cytując sekcję 2.3 RFC 3986 :
„Znaki, które są dozwolone w identyfikatorze URI, ale nie mają zarezerwowanego celu, nazywane są niezarezerwowanymi. Należą do nich wielkie i małe litery, cyfry dziesiętne, łącznik, kropka, podkreślenie i tylda”.
Zauważ, że RFC 3986 zawiera mniej zastrzeżonych znaków interpunkcyjnych niż starszy RFC 2396 .
źródło
ç
iõ
?post-title-with-%C3%A7-and-%C3%B5
, ale nadal będzie wyświetlana na pasku lokalizacji użytkownika jakopost-title-with-ç-and-õ
.Istnieją dwa zestawy znaków, na które musisz uważać: zarezerwowane i niebezpieczne .
W zastrzeżonych znaków są:
Znaki ogólnie uważane za niebezpieczne to:
Mogłem zapomnieć o jednym lub więcej, co prowadzi do tego, że powtarzam odpowiedź Carla V. Na dłuższą metę prawdopodobnie lepiej będzie, jeśli użyjesz "białej listy" dozwolonych znaków, a następnie zakodujesz łańcuch, zamiast próbować być na bieżąco ze znakami, które są zabronione przez serwery i systemy.
źródło
#
to zastrzeżony znak używany do zakładek na określonej stronie, utworzony przez posiadanie jednego elementu HTML z pasującym atrybutem nazwy lub atrybutu identyfikatora (sans#
-symbol).~
jest niebezpieczna. Czy na pewno tak jest?Najlepiej jest zachować tylko niektóre znaki (biała lista), zamiast usuwać niektóre znaki (czarna lista).
Możesz technicznie zezwolić na dowolny znak, o ile poprawnie go zakodujesz. Ale aby odpowiedzieć w duchu pytania, powinieneś pozwolić tylko tym postaciom:
Wszystko inne ma potencjalnie specjalne znaczenie. Na przykład możesz pomyśleć, że możesz użyć +, ale można go zastąpić spacją. i jest również niebezpieczny, zwłaszcza jeśli używasz pewnych reguł przepisywania.
Podobnie jak w przypadku innych komentarzy, zapoznaj się ze standardami i specyfikacjami, aby uzyskać szczegółowe informacje.
źródło
Zawsze bezpieczne
Są one bezpieczne (w teorii / specyfikacji), w zasadzie wszędzie z wyjątkiem nazwy domeny.
Kodowanie procentowe wszystkiego, czego nie ma na liście, i gotowe.
Czasami bezpieczne
Bezpieczny tylko wtedy, gdy jest używany w określonych składnikach adresu URL; używać ostrożnie.
Nigdy nie było bezpiecznie
Zgodnie ze specyfikacją URI (RFC 3986) wszystkie inne znaki muszą być zakodowane w procentach. To zawiera:
Jeśli problemem jest maksymalna kompatybilność, ogranicz zestaw znaków do AZ az 0-9 - _.
(z kropkami tylko dla rozszerzeń plików).
Miej na uwadze kontekst
Nawet jeśli jest prawidłowy zgodnie ze specyfikacją, adres URL może nadal być „niebezpieczny”, w zależności od kontekstu. Na przykład plik: /// URL zawierający nieprawidłowe znaki w nazwie pliku lub składnik zapytania zawierający „?”, „=” I „&”, gdy nie są używane jako separatory. Prawidłowa obsługa takich przypadków zależy na ogół od skryptów i można je obejść, ale należy o tym pamiętać.
źródło
=
nie jest to bezpieczne w przypadku zapytań. Na przykład język FIQL akceptuje znaki równości i określa się jako „przyjazny dla URI” oraz „zoptymalizowany i przeznaczony do użycia w komponencie zapytania”. W mojej interpretacji RFC 3986 wyraźnie zezwala na „=”, „&”, „+” i inne w zapytaniach.params.toString() // "key=730d67"
" (3) Podręcznik PHP, http-build-query: "Generowanie ciągu zapytania zakodowanego w adresie URL. [...] Powyższy przykład zwróci:0=foo&1=bar[...]
(4) J. Starr, Perishable Press: „Podczas tworzenia stron internetowych często konieczne jest dodawanie linków, które wymagają sparametryzowanych ciągów zapytań”.Patrząc na RFC3986 - Uniform Resource Identifier (URI): Generic Syntax , twoje pytanie obraca się wokół składnika ścieżki w identyfikatorze URI.
Cytując sekcję 3.3, prawidłowe znaki identyfikatora URI
segment
są typupchar
:Który rozkłada się na:
Albo innymi słowy: można użyć dowolnego (non-temat kontroli) znak z tabeli ASCII , except
/
,?
,#
,[
i]
.To zrozumienie jest poparte przez RFC1738 - Uniform Resource Locators (URL) .
źródło
-
i;
są bezpieczne, oto moja odpowiedź i jasno stwierdza RFC.unreserved = ALFA / DIGIT / "-" / "." / „_” / „~”
źródło
Z kontekstu, który opisujesz, podejrzewam, że to, co faktycznie próbujesz stworzyć, to coś, co nazywa się „ślimakiem SEO”. Najlepszą ogólnie znaną praktyką w tym zakresie jest:
Na przykład artykuł zatytułowany „Użycie! @% $ * Do przedstawiania przekleństw w komiksach” otrzymałby porcję „użytkowanie-reprezentowanie-przekleństw-komiksów”.
źródło
Format identyfikatora URI jest zdefiniowany w dokumencie RFC 3986 . Szczegóły w sekcji 3.3.
źródło
Z punktu widzenia SEO, łączniki są preferowane, a nie podkreślenia. Konwertuj na małe litery, usuń wszystkie apostrofy, a następnie zastąp wszystkie niealfanumeryczne ciągi znaków jednym łącznikiem. Odetnij nadmiar łączników na początku i na końcu.
źródło
Miałem podobny problem, chciałem mieć ładne adresy URL i doszedłem do wniosku, że muszę zezwalać tylko na litery, cyfry, - i _ w adresach URL. W porządku, potem napisałem kilka ładnych wyrażeń regularnych i zdałem sobie sprawę, że rozpoznaje on wszystkie znaki UTF8 nie są literami w .NET i został wkręcony. Wydaje się, że jest to znany problem dotyczący silnika wyrażeń regularnych .NET. Więc dotarłem do tego rozwiązania:
źródło
Zauważyłem, że bardzo przydatne jest zakodowanie mojego adresu URL na bezpieczny, gdy zwracałem wartość za pośrednictwem ajax / php do adresu URL, który został następnie ponownie odczytany przez stronę.
Wyjście PHP z koderem url dla znaku specjalnego &
Mam nadzieję, że ktoś uzna moje małe fragmenty kodu za przydatne! :)
źródło
Myślę, że szukasz czegoś takiego jak „Kodowanie adresu URL” - kodowanie adresu URL w celu „bezpiecznego” używania go w sieci:
Oto odniesienie do tego. Jeśli nie chcesz żadnych znaków specjalnych, po prostu usuń te, które wymagają kodowania adresu URL:
http://www.w3schools.com/TAGS/ref_urlencode.asp
źródło
Od 3 do 50 znaków. Może zawierać małe litery, cyfry i znaki specjalne - kropkę (.), Myślnik (-), podkreślenie (_) i stawkę (@).
źródło