Urlencode除了斜线之外的一切?

时间:2014-02-13 13:16:49

标签: php urlencode

是否有任何简洁明了的urlencode()任意字符串,但只留下斜杠(/)?

6 个答案:

答案 0 :(得分:17)

  1. /
  2. 拆分
  3. urlencode()每个部分
  4. 加入/

答案 1 :(得分:9)

你可以这样做:

$url = "http://www.google.com/myprofile/id/1001";
$encoded_url = urlencode($url);
$after_encoded_url = str_replace("%2F", "/", $url);

答案 2 :(得分:3)

基本上@clovecooks说的是,但是自从5.3开始不推荐使用split():

$path = '/path with some/illegal/characters.html';

$parsedPath = implode('/', array_map(function ($v) {
    return rawurlencode($v);
}, explode('/', $path)));

// $parsedPath == '/path%20with%20some/illegal/characters.html';

如果字符串已经编码,也可能需要在编码前解码。

答案 3 :(得分:1)

我想您正在尝试对整个HTTP网址进行编码。

我认为对整个HTTP URL进行编码的最佳解决方案是严格遵循浏览器。
如果您只跳过斜线,那么如果URL已经被编码,则会出现双重编码问题。
而且,如果网址中有一些参数(网址中有?&=#),编码将断开链接。

浏览器仅编码"<>`和多字节字符。 (将所有符号复制到浏览器中,您将获得列表)
您只需要对这些字符进行编码。

echo preg_replace_callback("/[\ \"<>`\\x{0080}-\\x{FFFF}]+/u", function ($match) {
    return rawurlencode($match[0]);
}, $path);

答案 4 :(得分:0)

是的,通过在用斜线组装它们之前正确地转出各个部件:

$url = urlencode($foo) . '/' . urlencode($bar) . '/' . urlencode($baz);

答案 5 :(得分:0)

  

$ encoded = implode(“/”,array_map(function($ v){return urlencode($ v);},split(“/”,$ url)));

这将拆分字符串,对部件进行编码并再次将字符串连接在一起。