Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这个下划线是从哪里来的?我只能假设有魔法_Php_Url_Codeigniter - Fatal编程技术网

Php 这个下划线是从哪里来的?我只能假设有魔法

Php 这个下划线是从哪里来的?我只能假设有魔法,php,url,codeigniter,Php,Url,Codeigniter,我在codeigniter框架中设置了以下测试用例控制器: class Test extends Controller { public function Test() { parent::Controller(); } public function index($bla = ''){ echo $this->uri->segment(3) . '<br/>'; echo $bla . '

我在codeigniter框架中设置了以下测试用例控制器:

class Test extends Controller {
    public function Test()
    {
        parent::Controller();
    }

    public function index($bla = ''){
        echo $this->uri->segment(3) . '<br/>';
        echo $bla . '<br/>';

        $url = site_url('test') . '/index/' . rawurlencode('foo bar') . '/';

        echo "<a href=\"$url\">click me</a>";
    }

}
类测试扩展控制器{
公共功能测试()
{
父::控制器();
}
公共功能索引($bla=''){
echo$this->uri->segment(3)。“
”; echo$bla.“
”; $url=site_url('test')。/index/'。rawurlencode('foo bar')。/'; 回声“; } }
我想
$bla
回显“foo bar”,而不是“foo_bar”。不管我是使用rawurlencode、urlencode还是什么都不使用,都会为空格字符插入一个“\u1”。我已经确认锚点的href包含了%20符号,所以我不明白为什么要更改字符串

我已经包括了两个屏幕截图来说明这一点,第一个图像显示没有参数传递给控制器时,第二个是传递给它的“foo-bar”。我只是不明白为什么“foo%20bar”会被修改


我还没有测试过这个,但您是否尝试过:

class Test extends Controller {
    public function Test()
    {
        parent::Controller();
    }

    public function index($bla = ''){
        echo $this->uri->segment(3) . '<br/>';
        echo rawurldecode($bla) . '<br/>';

        $url = site_url('test') . '/index/' . rawurlencode('foo bar') . '/';

        echo "<a href=\"$url\">click me</a>";
    }

}
类测试扩展控制器{
公共功能测试()
{
父::控制器();
}
公共功能索引($bla=''){
echo$this->uri->segment(3)。“
”; echo rawurldecode($bla)。“
”; $url=site_url('test')。/index/'。rawurlencode('foo bar')。/'; 回声“; } }

我明天有更多时间的时候会回来,但我想URI类中发生了一些有趣的事情。或者我完全错过了它。

我还没有测试过这个,但是你试过了吗:

class Test extends Controller {
    public function Test()
    {
        parent::Controller();
    }

    public function index($bla = ''){
        echo $this->uri->segment(3) . '<br/>';
        echo rawurldecode($bla) . '<br/>';

        $url = site_url('test') . '/index/' . rawurlencode('foo bar') . '/';

        echo "<a href=\"$url\">click me</a>";
    }

}
类测试扩展控制器{
公共功能测试()
{
父::控制器();
}
公共功能索引($bla=''){
echo$this->uri->segment(3)。“
”; echo rawurldecode($bla)。“
”; $url=site_url('test')。/index/'。rawurlencode('foo bar')。/'; 回声“; } }

我明天有更多时间的时候会回来,但我想URI类中发生了一些有趣的事情。或者可能我完全忽略了它。

我建议在codeigniter安装之外运行以下脚本,以查看是否是您的开发环境以意外的方式对url进行编码

<?php echo rawurlencode('foo bar');?>


如果你得到了
“foo%20bar”
,那一定是codeigniter的问题。如果不是,则可能是您的php环境正在添加下划线。

我建议在codeigniter安装之外运行以下脚本,以查看是否是您的开发环境以意外方式对url进行编码

<?php echo rawurlencode('foo bar');?>


如果你得到了
“foo%20bar”
,那一定是codeigniter的问题。如果不是,很可能是您的php环境添加了下划线。

它在PHP5.3上的CodeIgniter 2.0中工作得很好,但我从您的代码片段猜测您没有使用2.0

我建议您尝试查看配置文件。我不能告诉你什么行号,它使用的版本和你的不一样,但是要找这样的东西

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
确保里面有空间

可能是在旧版本中,段函数在传递回字符串之前清除了字符串


这只是一个猜测,但值得一试。

它在PHP5.3上的CodeIgniter 2.0中工作得非常好,但我从您的代码片段中猜测您没有使用2.0

我建议您尝试查看配置文件。我不能告诉你什么行号,它使用的版本和你的不一样,但是要找这样的东西

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
确保里面有空间

可能是在旧版本中,段函数在传递回字符串之前清除了字符串


这只是一个猜测,但值得一试。

尝试将配置更改为

$config['uri_protocol'] = "QUERY_STRING";

尝试将配置更改为

$config['uri_protocol'] = "QUERY_STRING";

你能显示HTML源代码吗?我试过你的代码,在我的本地主机上也可以。它显示时没有下划线。你在哪里加载了你的url助手。@pekka没有HTML源代码,控制器只是简单地回显一个简单的测试用例@kamal这很有趣,在你的配置文件中,$config['uri_protocol']设置为什么?你能显示HTML源代码吗?我试过你的代码,在我的本地主机上可以。它显示时没有下划线。你在哪里加载了你的url助手。@pekka没有HTML源代码,控制器只是简单地回显一个简单的测试用例@kamal这很有趣,在您的配置文件中,$config['uri_protocol']设置为什么?谢谢您的输入Conexion,但是rawurldecode()无法解码下划线。我在想到底是什么改变了它?谢谢你的输入Conexion,但是rawurldecode()无法解码下划线。我想知道是什么首先改变了它?感谢您的输入,我在codeigniter之外试用了它,通过一个GET变量通过一个简单的RawUrl编码的“foo bar”发送,唉,没有下划线。感谢您的输入,我在codeigniter之外试用了它,通过GET变量发送一个简单的rawUrl编码的“foo bar”,唉,这里没有下划线。Dired Pop-第一句话帮助我解决了这个问题,我运行的是1.7,不愿意升级到2.0。但是升级到2.0已经解决了这个问题。感谢Dired Pop-第一句话帮助我解决了问题,当时我正在运行1.7,不愿意升级到2.0。但是升级到2.0已经解决了这个问题。谢谢