2010-08-06 7 views
0

Récemment, quand j'ai vu la page de résultats google, la requête et d'autres paramètres ont été passés aveC# (hachage) au lieu de l'habituel "?"Comment passer des paramètres avec hachage dans PHP

Aussi, dans facebook j'ai vu la même chose. C'était assez intéressant et après une simple recherche avec google, j'ai trouvé les résultats liés à perl et à Ruby mais pas de résultat avec PHP.

Est-il possible de passer des paramètres aveC# en PHP au lieu de "?" ou est-ce possible seulement avec Perl/Ruby. Cela sera utile et les moteurs de recherche n'analyseront pas les paramètres dans les URL.

Toutes les idées me seront utiles.

Répondre

8

Traditionnellement, le # indiquait au navigateur de faire défiler automatiquement vers un point particulier de la page, qui était (et est toujours) souvent utilisé pour implémenter des liens d'une partie d'une page (par ex. contenu) à un autre (par exemple un en-tête de section).

Cependant, cela a également pour effet d'enregistrer l'URL contenant le # dans l'historique, même s'il est identique à l'URL précédente à l'exception du # et de ce qui suit. (En d'autres termes, l'utilisateur est toujours sur la même page.) Cela signifie que le bouton de retour peut être utilisé pour revenir à l'état dans lequel vous étiez précédemment, même si ce changement d'état ne correspond pas à une page. charge.

Les applications AJAX modernes l'utilisent donc souvent pour signifier qu'il s'est passé quelque chose dont l'utilisateur pourrait vouloir "revenir".

+0

Si je comprends bien, c'est vraiment seulement un signal. L'utilisation du bouton de retour n'effacera pas réellement les changements à la page. –

+0

tout tutoriel que vous avez référé en obtenant la valeur du paramètre comme dans google (style de hachage) en utilisant ajax? –

+1

@Aakash Chakaravarthy: Juste utilisé un article Wikipedia (http://en.wikipedia.org/wiki/Fragment_identifier) ​​et une expérience personnelle. Il existe des moyens d'obtenir la valeur de l'identifiant de fragment ('window.location' si je me souviens bien, mais je ne suis pas au courant des meilleures pratiques actuelles pour AJAX). – David

1

Non, ce n'est pas possible.
Qu'est-ce que vous avez vu est juste une décoration, pour refléter un appel AJAX dans la barre d'adresse.

Quelle que soit la langue choisie, toutes se trouvent sur le serveur et communiquent avec le navigateur en utilisant le protocole HTTP. Et aucune ancre autorisée dans les requêtes HTTP. C'est complètement du côté client

+0

Il est impossible _without_ scripts côté client de transmettre les variables au serveur. Vous pouvez facilement définir quelque chose pour faire javascript frapper le serveur avec les données de hachage –

+0

@Jamie ce n'est pas possible avec le protocole HTTP. Période –

+0

Il n'est pas envoyé sur le protocole HTTP lorsque vous cliquez sur une page, je peux être d'accord avec cela. Mais Javascript peut extraire ces données, sérialiser, puis frapper un script côté serveur avec un appel AJAX ou avec une redirection en tant que variables GET. –

0

Vous rencontrez une confusion dans vos résultats de recherche car le terme hash est overloaded, tout comme le concept de passage de paramètre.

Vous voyez des références au concept de passage de valeurs dans un hachage car un associative array est appelé un hachage dans certaines langues (ce qui est l'abréviation d'une table de hachage).

Le caractère # porte également un nom pouvant porter à confusion. On l'appelle "hash", "pound", "number" et "octothorpe". Depuis que j'ai grandi aux États-Unis, je l'appelle un "signe de la livre" dans ma tête, ce qui est probablement ennuyeux pour les utilisateurs de plus d'anglais britannique, et n'est pas moins risqué de confusion (considérez "£").

Le fait de passer des arguments de fonction dans un hachage en Perl est un bon moyen d'obtenir des arguments nommés pour une routine. PHP n'a que des arguments positionnels, mais l'utilisation d'un tableau fonctionne bien ici.

De nombreuses bibliothèques Web utilisent une structure de type table de hachage/associative pour les valeurs de formulaire. Les clés sont généralement l'ID du champ et les valeurs sont les valeurs du champ.

Dans un URI, le # indique le début du spécificateur de fragment. Il identifie une partie de la page vers laquelle pointe l'URI. Il n'est généralement pas utilisé pour transmettre les informations de demande du client au serveur.

-1

il y a probablement une réécriture de serveur ou alors. Exemple avec le serveur apache, vous pouvez gérer des uri comme

http://www.mysite.com#something

et réécrire comme

http://www.mysite.com/perl/script.pl?data=something

et traiter de manière comme une simple requête GET à votre script.pl

C'est tout le traitement côté serveur, invisible pour le client

+0

il ne peut pas être le traitement du serveur car le fragment n'est pas envoyé au serveur. –

+0

pas envoyé au serveur? bien peut-être que j'ai mal compris quelque chose, mais comment soumettre une requête à google sans envoyer quoi que ce soit à un serveur ... oO – benzebuth

+0

@benzebuth: ** Ce fragment ** n'est pas envoyé au serveur, ce qui signifie qu'il n'y a pas de rechargement de page et L'URL ne change pas (dans le sens où une modification d'URL appelle le rechargement de la page). Google et les applications similaires utilisent AJAX et envoie des données au serveur de cette façon. Votre sens commun essaie probablement d'expliquer que tout changement d'URL après '# 'n'entraîne pas le rechargement de la page, de sorte que (GET/POST) rien n'est envoyé au serveur. – trejder