2010-12-13 35 views
0

J'ai récemment testé mon site sur Safari et pour une raison étrange, il ne lit que le premier hashtag dans l'urlSafari plusieurs hashtags

http://www.mangamanga.com/mangaReader.php#mangaNo=3%23chapterNo=8%23pageNo=1

alors que dans tous les autres navigateurs, il ressemble à ceci

http://www.mangamanga.com/mangaReader.php#mangaNo=3#chapterNo=8#pageNo=1

quelqu'un pourrait-il expliquer pourquoi cela se produit.

+0

Je ne comprends pas pourquoi vous auriez besoin de plusieurs balises de hachage? –

+0

Est-ce l'URL envoyée au serveur ou est-ce seulement les navigateurs qui l'affichent comme ceci? – Gumbo

+0

le premier est comment le navigateur l'affiche et le second est comment il est envoyé sur le serveur – dbomb101

Répondre

3

Le dièse (#) est un caractère réservé dans les URL. Tous les caractères qui suivent le hachage sont la partie fragment d'une URL. Alors Safari échappe aux hachages supplémentaires illégaux à% 23.

http://labs.apache.org/webarch/uri/rfc/rfc3986.html

0

% 23 est la façon dont # symboles sont échappés. Apparemment, Safari a envie de faire ça, ce qui n'est pas le cas des autres navigateurs. Il semble charger la même page dans tous les cas.

Voici une liste des codes d'échappement: http://www.december.com/html/spec/esccodes.html

2

Une # plaine est en fait pas admis dans le fragment component:

fragment = *(pchar/"/"/"?") 

pchar est équivalent à cette expansion:

pchar  = ALPHA/DIGIT/"-"/"."/"_"/"~"/"%" HEXDIG HEXDIG/"!"/"$"/"&"/"'"/"("/")"/"*"/"+"/","/";"/"="/":"/"@" 

Pas # plaine là. Donc, le comportement de Safari serait le comportement attendu.

Mais peut-être que les autres navigateurs affichent simplement %23 comme # pour la lisibilité.

0

Ce que la plupart des gens ont dit est vrai; Safari le voit comme un caractère illégal (le deuxième hachage) mais d'autres navigateurs modernes (IE/Chrome) vont bien avec eux. Gumbo a déclaré que les autres navigateurs affichent simplement le deuxième hash en tant que # mais c'est vraiment% 23. Ceci est incorrect pour autant que je peux dire, parce que l'utilisation d'un document.location.hash.split('#') vous donnera le tableau suivant:

[0] - http://www.mangamanga.com/mangaReader.php#mangaNo=3 
[1] - chapterNo=8 
[2] - pageNo=1