web-dev-qa-db-ja.com

PHPで文字列を適切にURLエンコードする方法は?

検索ページを作成します。ここで検索クエリを入力すると、フォームがsearch.php?query=your queryに送信されます。どのPHP関数が最適で、検索クエリのエンコード/デコードに使用する必要がありますか?

87
Click Upvote

URIクエリの場合は urlencode // urldecode ;その他の場合は rawurlencode / rawurldecode を使用します。

urlencoderawurlencodeの違いは、

168
Gumbo

巧妙に命名された rlencode() および rldecode()

ただし、$_POSTおよび$_GETにある変数にurldecode()を使用する必要はありません。

19

これは私の使用例で、例外的な量のエンコードが必要です。たぶんあなたはそれが不自然だと思うかもしれませんが、私たちはこれを実稼働で実行しています。偶然にも、これはあらゆる種類のエンコーディングを対象としているため、チュートリアルとして投稿しています。

ユースケースの説明

誰かが当社のウェブサイトでプリペイドギフトカード(「トークン」)を購入しました。トークンには、引き換えるための対応するURLがあります。この顧客はURLを他の人にメールで送信したいと考えています。当社のWebページには、それを可能にするmailtoリンクが含まれています。

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>';

注:上記では、text/htmlドキュメントに出力することを想定しています。出力メディアタイプがtext/jsonの場合、出力エンコーディングはjson_encode()によって処理されるため、単純に$retval['url'] = $mailToUri;を使用します。

テストケース

  1. PHPテストサイトでコードを実行します(ここで言及すべき正規のものはありますか?
  2. リンクをクリックしてください
  3. メールを送る
  4. メールを受け取る
  5. そのリンクをクリック

見るべき:

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

そしてもちろん、これは上記の$tokenのJSON表現です。

9

URLエンコード関数を使用できますPHPは

rawurlencode() 

関数

ASPには

Server.URLEncode() 

関数

JavaScriptでは、

encodeURIComponent() 

関数。

0
Amranur Rahman