1

我需要能够在我的站点 URL 的 URI 段中包含空格和括号(该段用于 DB 查询)。所以,我rawurlencode()是一个字符串,然后rawurldecode()是接收页面中的同一个字符串,但它并不完全相同。空格很好,但括号留在其十六进制字符代码中。这完全搞乱了我的数据库查询。知道为什么rawurldecode不生成传递给的 EXACT 字符串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 正确传递字符串。:-( 想法?

4

3 回答 3

1

如果您不想使用 ID(可能出于 SEO 原因),您可以向 db - web url 添加另一个字段,并编写大学名称的网络安全版本...在您的示例中,它可能类似于Compton-Community-College-CA甚至小写。

完整网址:

http://localhost/ff/index.php/college/Compton-Community-College-CA

CodeIgniter 的 URL Helper有一个很好的功能:url_title()

于 2012-08-28T01:11:29.860 回答
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字段,但在 URL 中使用它收回。相反,以编程方式生成一个单独的字母数字 SEOid 并将其用于搜索引擎优化。相同的基本链接结构。

于 2012-08-28T01:03:29.423 回答
0

有点晚了,但发生在我身上,我找到了这个解决方案。

问题出在CI 的URI类的_filter_uri函数中。这就是他们在该功能中所做的:

// Convert programatic characters to entities
$bad    = array('$',        '(',        ')',        '%28',      '%29');
$good   = array('&#36;',    '&#40;',    '&#41;',    '&#40;',    '&#41;');

return str_replace($bad, $good, $str);

所以你必须反转它,然后应用rawurldecode

function view_college($college = FALSE)
{
   if($college === FALSE)
   {//no college provided
      redirect('');
   }
   $bad = array('&#36;',    '&#40;',    '&#41;',    '&#40;',    '&#41;');
   $good   = array('$',     '(',        ')',        '%28',      '%29');

   $college = str_replace($bad, $good, $college);
   $college = rawurldecode($college);
于 2017-04-26T20:16:20.293 回答