我正在使用 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 都可以正常工作。
尝试对专辑名称进行双重 URL 编码(即
urlencode(urlencode($album))
)。我试图将 URL 传递给 CodeIgniter 控制器一次,但它不断给我带来麻烦。所以我只是对它进行了双重编码,然后它就在另一边弹出了,没有问题。然后我对传递的参数运行 urldecode()。
如果这对您有帮助,请告诉我。
根据当前的 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
encode
通过前的值
$value = str_replace('=', '-', str_replace('/', '_', base64_encode($album)));
decode
收到后的值
$value = base64_decode(str_replace('-', '=', str_replace('_', '/', $value)));
从模型检索数据时,您需要对专辑名称进行urlencode,以便转义黑斜杠。
扩展@MikeMurko 答案以包括如何使用 Javascript 和 PHP。 只需进行double编码和解码即可;
JS:
var id = encodeURIComponent( encodeURIComponent('mystring/&-34') );
PHP:
$id = urldecode( urldecode('mystring/&-34') );
您需要使用 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