Czy w 2010 r. Udostępniłbyś adresy URL zawierające znaki UTF-8 w dużym portalu internetowym?
Znaki Unicode są zabronione zgodnie z RFC w adresach URL (patrz tutaj ). Aby były zgodne ze standardami, musiałyby być zakodowane w procentach.
Moim głównym celem jest jednak serwowanie niezakodowanych znaków wyłącznie w celu posiadania ładnie wyglądających adresów URL, więc kodowanie procentowe nie działa.
Wydaje się, że wszystkie główne przeglądarki analizują te adresy URL w porządku, bez względu na to, co mówi RFC. Moje ogólne wrażenie jest jednak takie, że wychodząc z domeny przeglądarek internetowych robi się bardzo chwiejny:
- Adresy URL są kopiowane + wklejane do plików tekstowych, wiadomości e-mail, a nawet witryn internetowych z innym kodowaniem
- Biblioteki klienta HTTP
- Egzotyczne przeglądarki, czytniki RSS
Czy mam słuszne wrażenie, że należy się tutaj spodziewać kłopotów, a zatem nie jest to (jeszcze) praktyczne rozwiązanie, jeśli obsługujesz odbiorców nietechnicznych i ważne jest, aby wszystkie Twoje linki działały poprawnie, nawet jeśli są cytowane i przekazywane dalej?
Czy istnieje jakiś magiczny sposób na wyświetlanie ładnie wyglądających adresów URL w HTML?
http://www.example.com/düsseldorf?neighbourhood=Lörick
który można skopiować + wkleić z nienaruszonymi znakami specjalnymi, ale działa poprawnie, gdy zostanie ponownie użyty w starszych klientach?
Odpowiedzi:
Użyj kodowania procentowego. Nowoczesne przeglądarki zajmą się problemami z wyświetlaniem i wklejaniem oraz sprawią, że będzie czytelny dla człowieka. E. g. http://ko.wikipedia.org/wiki/ 위키 백과: 대문
Edycja: kiedy skopiujesz taki adres URL w Firefoksie, schowek będzie przechowywał zakodowaną w procentach formę (co zwykle jest dobrą rzeczą), ale jeśli skopiujesz tylko część, pozostanie niezakodowana.
źródło
GET /images/logo.png HTTP/1.1
? Czy zawsze kodują URL w procentach?Co powiedział Tgr. Tło:
To nie jest identyfikator URI. Ale to jest IRI .
Nie możesz dołączyć IRI do dokumentu HTML4; rodzaj atrybutów, takich jak
href
jest zdefiniowany jako URI, a nie IRI. Niektóre przeglądarki i tak poradzą sobie tutaj z IRI, ale to nie jest dobry pomysł.Aby zakodować IRI w URI, weź ścieżkę i części zapytania, zakoduj je w UTF-8, a następnie zakoduj procentowo bajty spoza ASCII:
Jeśli w części IRI zawierającej nazwę hosta znajdują się znaki spoza zestawu ASCII, np.
http://例え.テスト/
, zostały zakodowane przy użyciu Punycode .Teraz masz identyfikator URI. To brzydki identyfikator URI. Ale większość przeglądarek ukryje to za Ciebie: skopiuj i wklej go w pasku adresu lub podążaj za nim w linku, a zobaczysz go wyświetlonego z oryginalnymi znakami Unicode. Wikipedia korzysta z tego od lat, np .:
Jedyną przeglądarką, której zachowanie jest nieprzewidywalne i nie zawsze wyświetla ładną wersję IRI, jest ...
...cóż wiesz.
źródło
W zależności od schematu adresu URL możesz sprawić, że część zakodowana w UTF-8 będzie „nieważna”. Na przykład, jeśli spojrzysz na adresy URL przepełnienia stosu, mają one następującą postać:
Jednak serwer tak naprawdę nie dba o to, czy część po identyfikatorze jest błędna, więc to również działa:
Więc gdybyś miał taki układ, to mógłbyś potencjalnie użyć UTF-8 w części po identyfikatorze i nie miałoby znaczenia, gdyby został zniekształcony. Oczywiście to prawdopodobnie działa tylko w nieco szczególnych okolicznościach ...
źródło
Nie jestem pewien, czy to dobry pomysł, ale jak wspomniano w innych komentarzach i jak to interpretuję, wiele znaków Unicode jest poprawnych w adresach URL HTML5 .
Np.
href
Dokumenty mówią http://www.w3.org/TR/html5/links.html#attr-hyperlink-href :Następnie definicja „prawidłowego adresu URL” wskazuje na adres http://url.spec.whatwg.org/ , który definiuje punkty kodowe adresu URL jako:
Termin „punkty kodowe adresu URL” jest następnie używany w kilku częściach algorytmu analizowania, np. Dla stanu ścieżki względnej :
Również walidator http://validator.w3.org/ przekazuje adresy URL, takie jak
"你好"
i nie obsługuje adresów URL zawierających znaki takie jak spacje"a b"
Powiązane: jakie znaki powodują, że adres URL jest nieprawidłowy?
źródło
"你好"
i"a b"
) muszą być zakodowane w procentach podczas wykonywania żądania HTTP, prawda?"a b"
jestem prawie pewien, że tak, ponieważ spacji nie ma na liście dozwolonych powyżej. Dla"你好"
, to zdecydowanie lepszy pomysł, aby procent kodowania, ale nie wiem, czy jest to tylko kwestia „implementacje nie są wystarczająco dobre” lub „standard mówi tak”. Wydaje się, że standard HTML zezwala na te znaki. Ale myślę, że jest to określone przez standard HTTP, a nie HTML. Zobacz też: stackoverflow.com/questions/912811/…Ponieważ wszystkie te komentarze są prawdziwe, należy zauważyć, że jeśli zatwierdzone przez ICANN znaki arabskie (perskie) i chińskie mają być zarejestrowane jako nazwa domeny, wszystkie firmy tworzące przeglądarki (Microsoft, Mozilla, Apple itp.) Muszą obsługują Unicode w adresach URL bez żadnego kodowania, a te powinny być przeszukiwane przez Google itp.
Więc ten problem zostanie rozwiązany jak najszybciej.
źródło
Użyj formularza zakodowanego w procentach . Na przykład niektóre (głównie stare) komputery z systemem Windows XP nie obsługują Unicode, ale raczej kodowanie ISO. To jest powód, dla którego wymyślono adresy URL zakodowane w procentach. Ponadto, jeśli podasz użytkownikowi wydrukowany na papierze adres URL zawierający znaki, których nie można łatwo wpisać, może on mieć trudności z wpisaniem go (lub po prostu go zignorować). Forma zakodowana w procentach może być nawet używana na wielu najstarszych maszynach, jakie kiedykolwiek istniały (chociaż oczywiście nie obsługują one internetu).
Jest jednak minus, ponieważ znaki zakodowane procentowo są dłuższe niż oryginalne, co może skutkować naprawdę długimi adresami URL. Ale po prostu spróbuj to zignorować lub użyj skracacza adresów URL (polecam w tym przypadku goo.gl , który tworzy 13-znakowy adres URL). Ponadto, jeśli nie chcesz rejestrować się na konto Google, wypróbuj bit.ly (bit.ly tworzy nieco dłuższe adresy URL, których długość wynosi 14 znaków).
źródło
Dla mnie to jest właściwy sposób, to właśnie zadziałało:
To zadziałało, a teraz linki są wyświetlane poprawnie:
http://newspaper.annahar.com/article/121638 -معرض - جوزف-حرب-في-غاليري-جانين-ربيز-لوحاته-الجدية-تبحث-وتكتشف-وفرض-الل
Link znaleziony na:
http://www.galeriejaninerubeiz.com/newsite/news
źródło