我需要能够在我网站的URL的URI段中包含空格和括号(该段用于数据库查询)。所以,我rawurlencode()
一个字符串,然后rawurldecode()
接收页面中的相同字符串,但它并不完全相同。空格很好,但括号保留在十六进制字符代码中。这完全搞砸了我的数据库查询。知道为什么rawurldecode
没有产生传递给rawurlencode()
的精确字符串?
原始字符串=康普顿社区学院(CA)
编码的字符串=
Compton%20Community%20College%20%28CA%29
解码后的字符串的vardump是
string(38) "Compton Community College (CA)"
在视图页面源
中 "Compton Community College (CA)"
修改的
好吧,显然这可能是一个Codeigniter的东西(我正在使用)。代码
<a href='<?php echo site_url('college/'.rawurlencode($player['college'])); ?>'>
生成http://localhost/ff/index.php/college/Compton%20Community%20College%20%28CA%29
最终的URI段将作为以下函数中的参数
收到function view_college($college = FALSE)
{
if($college === FALSE)
{//no college provided
redirect('');
}
$college = rawurldecode($college);
此时字符串已经显示在上面显示的格式中。所以也许我搞砸了一些东西,或者只是不能指望CI正确传递字符串。 :-(想法?
答案 0 :(得分:1)
如果您不想使用ID(可能出于SEO原因),您可以在db - web url中添加另一个字段,并编写大学名称的Web安全版本...在您的示例中它可以类似于 Compton-Community-College-CA 甚至小写。
完整网址:
http://localhost/ff/index.php/college/Compton-Community-College-CA
CodeIgniter's URL Helper有一个很好的功能: url_title()。
答案 1 :(得分:0)
否否否。不要那样做。太可怕了!
将所有大学放入数据库并使用自动递增整数id
列深入研究其内容:
如果您在<base>
中放置了一个HTML <head>
元素来定义根目录:
<base href="http://localhost/yourapp/">
然后你可以写得非常简单:
<a href='college/<?= $id;?>'><?= $name;?></a>
基本上会呈现代码如下:
<a href='http://localhost/yourapp/college/5'>Some Community College</a>
更新1:在@Frank Farmer的评论之后,我建议保留自动递增id
字段,但在网址中使用此字段撤消。相反,以编程方式生成单独的字母数字SEOid并将其用于搜索引擎优化。相同的基本链接结构。
答案 2 :(得分:0)
有点晚了,但发生在我身上,我发现了这个解决方案。
问题出在CI的 URI 类的 _filter_uri 函数中。这就是他们在该职能中所做的事情:
// Convert programatic characters to entities
$bad = array('$', '(', ')', '%28', '%29');
$good = array('$', '(', ')', '(', ')');
return str_replace($bad, $good, $str);
所以你必须将其反转,然后应用 rawurldecode :
function view_college($college = FALSE)
{
if($college === FALSE)
{//no college provided
redirect('');
}
$bad = array('$', '(', ')', '(', ')');
$good = array('$', '(', ')', '%28', '%29');
$college = str_replace($bad, $good, $college);
$college = rawurldecode($college);