Php 这个下划线是从哪里来的?我只能假设有魔法
我在codeigniter框架中设置了以下测试用例控制器: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 . '
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已经解决了这个问题。谢谢