web-dev-qa-db-fra.com

Comment correctement encoder une chaîne en PHP?

Je fais une page de recherche, où vous tapez une requête de recherche et le formulaire est soumis à search.php?query=your query. Quelle fonction PHP est la meilleure et que je devrais utiliser pour encoder/décoder la requête de recherche?

87
Click Upvote

Pour la requête URI, utilisez urlencode / urldecode ; pour toute autre utilisation, utilisez rawurlencode / rawurldecode .

La différence entre urlencode et rawurlencode est que

168
Gumbo

Le malin nommé rlencode () et rldecode () .

Cependant, vous ne devriez pas avoir besoin d'utiliser urldecode() sur les variables qui apparaissent dans $_POST et $_GET.

19
Oliver Charlesworth

Voici mon cas d'utilisation, qui nécessite une quantité exceptionnelle d'encodage. Vous pensez peut-être que cela a fonctionné, mais nous utilisons cela pour la production. Par coïncidence, cela couvre tous les types d’encodage, alors j’envoie un tutoriel.

Description du cas d'utilisation

Quelqu'un vient d'acheter une carte-cadeau prépayée ("jeton") sur notre site Web. Les jetons ont des URL correspondantes pour les échanger. Ce client souhaite envoyer l'URL par courrier électronique à quelqu'un d'autre. Notre page Web comprend un lien mailto qui leur permet de le faire.

Code PHP

// The order system generates some opaque token
$token = 'w%a&!e#"^2(^@azW';

// Here is a URL to redeem that token
$redeemUrl = 'https://httpbin.org/get?token=' . urlencode($token);

// Actual contents we want for the email
$subject = 'I just bought this for you';
$body = 'Please enter your shipping details here: ' . $redeemUrl;

// A URI for the email as prescribed
$mailToUri = 'mailto:?subject=' . rawurlencode($subject) . '&body=' . rawurlencode($body);

// Print an HTML element with that mailto link
echo '<a href="' . htmlspecialchars($mailToUri) . '">Email your friend</a>';

Remarque: ce qui précède suppose que vous exportez vers un document text/html. Si votre type de support de sortie est text/json, Utilisez simplement $retval['url'] = $mailToUri; Car l'encodage de sortie est géré par json_encode().

Cas de test

  1. Exécutez le code sur un PHP site de test (existe-t-il un code canonique que je devrais mentionner ici?)
  2. Cliquer sur le lien
  3. Envoyer l'email
  4. Recevez le mail
  5. Cliquez sur ce lien

Tu devrais voir:

"args": {
  "token": "w%a&!e#\"^2(^@azW"
}, 

Et bien sûr, ceci est la représentation JSON de $token Ci-dessus.

9
William Entriken

Vous pouvez utiliser les fonctions de codage d’URL PHP a la

rawurlencode() 

une fonction

ASP a le

Server.URLEncode() 

une fonction

En JavaScript, vous pouvez utiliser le

encodeURIComponent() 

une fonction.

0
Amranur Rahman