web-dev-qa-db-fra.com

Encoder la chaîne de texte ajoutée en tant que requête à l'URL

J'ai actuellement un shortcode en cours d'utilisation qui intègre un bouton sur certaines pages de produits. En cliquant sur ce bouton, l'utilisateur est amené à un formulaire de contact sur une autre page et le titre du produit à partir duquel le bouton a été cliqué est ajouté à la fin de l'URL du formulaire de contact sous forme de chaîne de requête. Ce titre de produit est ensuite extrait de la chaîne de requête et automatiquement renseigné dans un champ intitulé "produits" du formulaire de contact.

Code comme suit:

add_shortcode( 'dynamic_contact_button', 'button_product_page' );

function button_product_page() {
global $product;
return "href='/contact-form/?products=Product:%20" .$product->get_title(). "&#contact_form'";
}

Cela crée une URL telle que:

https://www.example.com/contact-form/?products=Product: Brown Paint - 1L&#contact_form

Cela fonctionne assez bien ... jusqu'à ce qu'un titre de produit inclue un caractère "non sécurisé" qui ne peut pas être ajouté à la chaîne de requête. Par exemple, le caractère apostrophe 'pour indiquer une mesure en pieds dans un titre de produit - la chaîne de requête est coupée lorsqu'un de ces éléments apparaît, signifiant qu'une partie seulement du titre du produit est reportée dans le formulaire. Je suis sûr qu'il existe de nombreux autres personnages non sécurisés qui pourraient causer des problèmes similaires.

Puis-je ajouter quelque chose au code ici pour encoder le texte du titre du produit ajouté ... de sorte que l'espace devient% 20 , une apostrophe devient% 27 , etc. Je vois il y a une option urlencode dans PHP, mais je ne comprends pas comment l'implémenter.

2
ConM

Pour encoder l'URL, vous pouvez utiliser la fonction PHP urlencode( $url ) ou utiliser la fonction WordPress urlencode_deep( $array | $str );.

add_shortcode( 'dynamic_contact_button',    'button_product_page' );

function button_product_page() {
    global $product;
    return urlencode( "/contact-form/?products=Product:%20" .$product->get_title(). "&#contact_form" );
}

liens:

WordPress - urlencode_deep

urlencode

4
John Zenith

La fonction url_encode est votre ami. Il s'agit d'une fonction standard PHP qui code les chaînes au format URL valide.

2
Tom J Nowell