2009-11-18 11 views
0

J'essaie de urlencode utiliser pour convertir la chaîne: <a href="<?php print 'search.php?query='.quote_replace(addmarks($search_results['did_you_mean'])).'&search=1'?>">comment utiliser urlencode en php

En fait, je veux mettre en place un moteur de recherche.

|-www 
|- index.php 
|- search directory 
    |- search.php 
    |- header.html 
    |- search_form.html 
    |- search_result.html 
    |- footer.html 

search.php includes header.html,search_form.html,search_result.html etc.

-je accéder à l'aide search.php: localhost/index.php/?page=search

search_form.html incluent bouton pour rechercher. Et il appelle search.php en utilisant: <form action="index.php/?page=search" method="get">. Je ne suis pas sûr que ce soit juste. Après avoir soumis la requête de recherche, search.php appelle search_result.html pour afficher le résultat. Le code search_result.html: <a href="<?php print 'search.php?query='.quote_replace(addmarks($search_results['did_you_mean'])).'&search=1'?>"><?php print $search_results['did_you_mean_b']; ?>

Il semble devrait fonctionner, mais après je clique sur le bouton de recherche, l'URL de résultat est index.php/?query=&search=1. Et je pense que cela devrait être index.php/?page=search/?query=&search=1. Donc, j'essaie d'utiliser urlencode pour le résoudre.

Et je ne sais pas si l'idée est bonne.

Merci beaucoup pour votre aide.

+0

@ ApoY2k, j'ai modifié le message et essayer de l'expliquer clairement. Pouvez-vous m'aider à trouver où est le problème? Merci beaucoup. –

Répondre

10
$url = 'search.php?' . http_build_query(array(
    'query' => $search_results['did_you_mean'], 
    'search' => 1 
)); 

C'est la manière la plus simple d'aller - veuillez voir http_build_query().

Je ne sais pas ce que vos fonctions quote_replace() et addmarks() font, mais lorsque vous exécutez urlencode("search.php?query=") ce sera aussi coder pour la ? et la = et entraînera search.php%3Fquery%3D (même pour urlencode("&search=1") qui code pour la & et la = et entraînera %26search%3D1) ce qui au total rendra l'URL inutilisable.

+1

+1 J'avais oublié cette fonction, c'est incroyablement utile! –

+0

@Stefan, vous avez trouvé comment utiliser http_build_query(). Merci –

+0

@Stefan, je veux juste traiter le '?'. Mais je suis totalement perdu en faisant ça. Pouvez-vous m'aider? –

4

urlencode est utilisé comme ceci:

$url = 'http://example.com/page?foo='.urlencode($foo).'&bar='.urlencode($bar); 
+0

@Bart van Heukelom, Merci, votre exemple est bon. –

+0

@Bart van Heukelom, mais comment gérer le point d'interrogation? –

+0

Je ne comprends pas ce que vous voulez dire. Handle est un mot très générique. Le point d'interrogation qui sépare le nom de la ressource de la chaîne de requête n'a pas besoin de traitement particulier. –