Katastrofa jest wynikiem niedawno odkrytych błędów w Chrome - oraz innych przeglądarek WebKit * - specyficznie związane albo (!) %%30%30
, %0%30
Albo %%300
jako część zawartości, co wewnętrznie wszystko skończy się reprezentujący ten sam symbol: zerowy . Możesz przeczytać więcej o błędzie tutaj .
To nie jest błąd, który wpływa na większość linków, więc ogólnie nie musisz się martwić o najechanie kursorem na linki.
Uwagi:
* Inne przeglądarki WebKit to Safari, Opera, Steam Browser, Midori, S60 (Symbian), Blackberry Browser i Playstation 3 - ale nie Firefox, Internet Explorer lub Edge.
Edycja: Ten błąd został teraz naprawiony w Chrome 45.0.2454.101, jak wskazuje Deltik .
Więcej o tym, co się dzieje
Problem związany jest z canonicalizerem URL , który działa, gdy tylko umieścisz kursor nad linkiem - być może do wyświetlania linku na pasku stanu przeglądarki i do wstępnego pobrania strony internetowej, aby ładowała się szybciej po kliknięciu.
Jeśli chodzi o rolę kanonizatora adresów URL:
gdy adres URL jest zapisywany HTML
, może być napisany w formie takiej jak /home
lub ../../home
, ale przeglądarki muszą tłumaczyć ten adres URL na coś z protokołem i domeną, jak http://superuser.com/home
. Ponadto adres URL może zawierać sekwencje specjalne URL, które muszą zostać przetłumaczone , a te sekwencje kodowane są w procentach , np %%30%30
. (Bardziej wyczerpująca lista znaków ucieczki tutaj ).
Funkcjonalność obsługi tego tłumaczenia URL -a kończy się awarią, ponieważ otrzymuje dane, których deweloperzy nie oczekiwali / nie obsłużyli.
Oto podsumowanie zmiany kodu, która rozwiązała problem:
Prawidłowo obsługuj problematyczne zagnieżdżone sekwencje specjalne w ścieżkach adresów URL.
W szczególności, jeśli usunięcie danych wejściowych prowadzi do wyjściowego adresu URL zawierającego nową sekwencję zmiany znaczenia, np. Konwersję danych wejściowych „%% 30% 30” na „% 00”, należy wstawić wiodące „%” jako „% 25”, aby zapewnić wynik sekwencja nie jest traktowana jako nowa poprawna sekwencja zmiany znaczenia.
Zapewnia to, że kanonizacja tego samego adresu URL po raz drugi nie spowoduje zmian w nim, co jest ważne dla uniknięcia awarii i innych błędów w różnych miejscach zarówno w kompilacjach debugowania, jak i wydań.