3

この URL をブラウザに入力すると、次のようになります。http://www.google.com/?q=ä

実際に送られてきたURLはhttp://www.google.com/?q=%C3%A4

PHP を使用して同じ変換を行いたい - どうすればよいですか?

私が試したこと:

$url = 'http://www.google.com/?q=ä'; //utf8 encoded

echo rawurlencode($url);
//gives http%3A%2F%2Fwww.google.com%2F%3Fq%3D%C3%A4

$u = parse_url($url);
echo $url['scheme'].'://'.$url['host'].$url['path'].'?'.rawurlencode($url['query']);
//gives http://www.google.com/?q%3D%C3%A4

上記の URL は単なる例です。

http://www.example.com/ä
http://www.example.com/ä?foo=ä&bar=ö
http://www.example.com/Περιβάλλον?abc=Περιβάλλον

ここで提供される答えは十分に一般的ではありません: ブラウザーのように php を使用して URL をエンコードする方法

4

2 に答える 2

13

わかりました、少し時間がかかりましたが、普遍的な解決策があると思います:

function safe_urlencode($txt){
  // Skip all URL reserved characters plus dot, dash, underscore and tilde..
  $result = preg_replace_callback("/[^-\._~:\/\?#\\[\\]@!\$&'\(\)\*\+,;=]+/",
    function ($match) {
      // ..and encode the rest!  
      return rawurlencode($match[0]);
    }, $txt);
  return ($result);
}

基本的に、URL予約文字http://www.ietf.org/rfc/rfc3986.txt)+いくつかの文字(「ドット」もそのままにしておく必要があると思うため)を使用して文字列を分割し、 rawurlencode()を実行します残り。

echo safe_urlencode("https://www.google.com/?q=ä");
// http://www.google.com/?q=%C3%A4

echo safe_urlencode("https://www.example.com/Περιβάλλον?abc=Περιβάλλον");
// http://www.example.com/%CE%A0%CE%B5%CF%81%CE%B9%CE%B2%CE%AC%CE%BB%CE%BB%CE%BF%CE%BD?abc=%CE%A0%CE%B5%CF%81%CE%B9%CE%B2%CE%AC%CE%BB%CE%BB%CE%BF%CE%BD
// ^ This is some funky stuff, but it should be right
于 2013-03-15T08:07:34.140 に答える
-1

queryスキーマとホストを変更せずに URIの一部をエンコードするように見えます。

前文

redirectエンコードされた文字列を aまたは as query argument(?url=http%3A%3A....)として使用するかどうかを言語が認識できないため、これを実現するために言語によって出荷される汎用関数はありません。

したがって、開発者は、エンコードする部分を抽出する必要があります。

答え

独自のコードを関数としてカプセル化します。

function encodeUrlQuery($url) {
  $u = parse_url($url);
  return $u['scheme'].'://'.$u['host'].$u['path'].'?'.rawurlencode($u['query']);
}

echo encodeUrl('http://www.google.com/?q=ä');
于 2013-03-15T08:09:35.610 に答える