在 URL CodeIgniter 中处理斜杠('/')

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

我正在使用 CodeIgniter 创建一个网站。我有一个像

http://mysite.com/albums/MJ/Dangerous.html
这样的网址,其中
MJ
是艺术家姓名,
Dangerous
是专辑名称。这两者都是动态的并且从数据库中获取。

在数据库中,有一些专辑中带有斜杠(“/”)字符。所以,这样的 URL 就变成了

http://mysite.com/albums/50-cent/Get+Rich+or+Die+Tryin%27%2FThe+Massacre.html
。解码后结果为
http://ringtones/albums/50-cent/Get Rich or Die Tryin'/The Massacre.html
。这里的艺术家是
50-cent
,专辑名称是
Get Rich or Die Tryin'/The Massacre

我的问题是,我该怎么做才能获得整个专辑名称,即

Get Rich or Die Tryin'/The Massacre.html
作为带有斜杠字符的单个参数?目前,当我单击此类 URL 时,CodeIgniter 显示错误“找不到页面”。所有其他没有
/
的 URL 都可以正常工作。

php url-rewriting urlencode codeigniter-2 codeigniter-url
6个回答
4
投票

尝试对专辑名称进行双重 URL 编码(即

urlencode(urlencode($album))
)。我试图将 URL 传递给 CodeIgniter 控制器一次,但它不断给我带来麻烦。所以我只是对它进行了双重编码,然后它就在另一边弹出了,没有问题。然后我对传递的参数运行 urldecode()。

如果这对您有帮助,请告诉我。


1
投票

根据当前的 SEO 趋势,无需在 url 中引入引用或在页面上获取。 相反,在保存(在矿渣类型的字段中)和检索期间,您可以使用这种选项。

$base_url = "http://ringtones/";
$controller = "albums";

$artist = "50 cent";
$album = "Get Rich Or Die Tryin' / The Massacre";

$link1 = $base_url.$controller.'/'.url_title($artist,'-',TRUE).'/'.url_title($album,'-',TRUE);
echo $link1;

结果:

http://ringtones/albums/50-cent/get-rich-or-die-tryin-the-massacre

1
投票

encode
通过前的值

$value = str_replace('=', '-', str_replace('/', '_', base64_encode($album)));

decode
收到后的值

$value = base64_decode(str_replace('-', '=', str_replace('_', '/', $value)));

0
投票

从模型检索数据时,您需要对专辑名称进行urlencode,以便转义黑斜杠。


0
投票

扩展@MikeMurko 答案以包括如何使用 Javascript 和 PHP。 只需进行double编码和解码即可;

JS:

var id = encodeURIComponent( encodeURIComponent('mystring/&-34') );

PHP:

$id = urldecode( urldecode('mystring/&-34') );

0
投票

您需要使用 URL 中字符的 HTML 转义版本...

请参阅下文以获取参考。

http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php

HTML 编码后,您的 URL 应类似于:

http://ringtones/albums/50-cent/Get Rich or Die Tryin'/The Massacre.html
© www.soinside.com 2019 - 2024. All rights reserved.