Urlencode除了斜线之外的一切?

问题描述 投票:9回答:6

是否有任何干净,简单的方法urlencode()任意字符串,但留下斜线(/)?

php urlencode
6个回答
17
投票
  1. /分裂
  2. urlencode()每个部分
  3. 加入/

11
投票

你可以这样做:

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

4
投票

基本上@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';

如果字符串已经编码,也可能希望在编码之前解码。


2
投票

我想您正在尝试编码整个HTTP URL。

我认为编码整个HTTP URL的最佳解决方案是严格遵循浏览器。 如果你只是跳过斜杠,那么如果网址已被编码,你将会遇到双重编码问题。 如果url中有一些参数,(?&=#都在url中),编码将破坏链接。

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

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

0
投票

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

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

0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.