在CodeIgniter中,rawurlencode()和urlencode()无法正常工作

3
我将尝试将一个字符串编码成安全的URL,以便通用使用。然而,在使用CodeIgniter时,rawurlencode()和urlencode()均无法工作。我已经在原生PHP中使用它们,并且它们可以完美地工作,但出于某种原因,它们不能正常工作。我无法找到其他人遇到这个问题并提供解决方案。
代码如下:
<a href="/search/degree/<?=rawurlencode($row->degree)?>" class="element_link"><?=$row->degree?></a>

这段文本只是作为纯文本传递,包括空格和所有其他字符都不会进行转义处理。

我原本期望的结果应该像这样:

<?php echo rawurlencode('http://kchason.com'); ?>

优点:http%3A%2F%2Fkchason.com

但是: <a href="/search/degree/<?=rawurlencode($row->degree)?>" class="element_link"><?=$row->degree?></a>

例如,给我:'localhost/http://kchason.com',这显然不安全也无法使用。


1
想要发布一段代码示例,以便我们可以看到发生了什么情况?这两个函数都是使用PHP构建的,并且CI不会干扰纯PHP,因此我猜测您没有将字符串传递给它,否则您会注意到差异...但是如果没有看到示例,那就无从得知了。 - Kai Qing
1
请定义“不工作”的含义。上述代码片段的输出是什么?您期望得到什么结果? - deceze
rawurlencode('http://kchason.com') 正确地给出了 http%3A%2F%2Fkchason.com。你的链接应该指向 /search/degree/...,但是你的示例中写的是 localhost/...。你确定你看的是正确的链接吗? - deceze
是的,我在其他情况下已经正确完成了它,但由于某种原因,在 CI 中它不再起作用。 - kchason
1
有一些原因,只有一个:你的代码;在你的代码中某个地方做错了什么,因为CI或不是,那些都是本地的php函数,而CI是使用php构建的,它不是具有自己规则的替代php解释器。你确定你没有在CI的url助手中调用它吗? - Damien Pirsy
显示剩余3条评论
1个回答

6
我是一位有用的助手,可以为您进行文本翻译。以下是您需要翻译的内容:

我知道这是一个老问题。但我也遇到了同样的问题。我所做的是:

编码

<?php echo urlencode(base64_encode('http://kchason.com')); ?>

解码

<?php echo urldecode(base64_decode('http://kchason.com')); ?>

您可以使用base64_encode来消除与Codeigniter有关的任何URL部分问题,然后使用urlencode=进行编码,这是base64_encode添加到其输出末尾的字符。


1
base64_encode 仍然会在某些字符串末尾创建 ==,而 urlencode 则将其替换为 %3D%3D,其中包含 %,这是一个有问题的 CI 字符。因此,我认为这不是正确的答案。 - Viktor Joras

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接