Php 简单搜索:使用CodeIgniter将表单变量传递给URI

Php 简单搜索:使用CodeIgniter将表单变量传递给URI,php,codeigniter,Php,Codeigniter,我的每一页都有一张搜索表。如果我使用form helper,它默认为$\u POST。我希望搜索词显示在URI中: http://example.com/search/KEYWORD 我在谷歌上呆了大约一个小时,但没有用。我只找到了一些关于$\u GET基本上是如何被禁用的文章,因为本地URI约定。我不可能是第一个想要这种功能的人,是吗?提前谢谢 我对CodeIgniter了解不多,但它是PHP,所以$\u GET不应该对您仍然可用吗?你可以像谷歌一样设置你的URL的格式:mysite.com

我的每一页都有一张搜索表。如果我使用form helper,它默认为
$\u POST
。我希望搜索词显示在URI中:

http://example.com/search/KEYWORD

我在谷歌上呆了大约一个小时,但没有用。我只找到了一些关于
$\u GET
基本上是如何被禁用的文章,因为本地URI约定。我不可能是第一个想要这种功能的人,是吗?提前谢谢

我对CodeIgniter了解不多,但它是PHP,所以
$\u GET
不应该对您仍然可用吗?你可以像谷歌一样设置你的URL的格式:
mysite.com/search?q=KEYWORD
,然后用
$\u GET['q']
取出数据


此外,搜索表单似乎不是使用POST的好地方;GET是可书签的,并不意味着服务器端正在发生变化。

据我所知,没有任何方法可以通过简单的帖子来实现这一点。但是,您可以通过Javascript访问表单并更新目标。例如:

<form id="myform" onsubmit="return changeurl();" method="POST">
<input id="keyword">
</form>

<script>
function changeurl()
{
    var form = document.getElementById("myform");
    var keyword = document.getElementById("keyword");

    form.action = "http://mysite.com/search/"+escape(keyword.value);

    return true;
}
</script>

函数changeurl()
{
var form=document.getElementById(“myform”);
var关键字=document.getElementById(“关键字”);
form.action=”http://mysite.com/search/“+转义(关键字.value);
返回true;
}

查看这篇文章,了解如何启用GET查询字符串和分段URL

启用后,可以使用以下方法检索其他变量

// url = http://example.com/search/?q=text
$this->input->get('q');

这更好,因为您不需要更改允许的\u uri\u chars配置设置。如果您简单地将用户输入的任何内容放入URI中,则可能会出现“您提交的URI包含不允许的字符”错误

如果您与未启用JS的人打交道,有一个更好的解决方案

查看:

<?php echo form_open('ad/pre_search');?>
   <input type="text" name="keyword" />
</form>

控制器

<?php
    function pre_search()
    {
        redirect('ad/search/.'$this->input->post('keyword'));
    }

    function search()
    {
        // do stuff;
    }
?>


我以前使用过很多次。

以下是最佳解决方案:

$uri = $_SERVER['REQUEST_URI'];

$pieces = explode("/", $uri);

$uri_3 = $pieces[3];

谢谢

不,使用Codeigniter在Codeigniter中禁用了“GET”-CI URI库将不接受搜索字符串中的撇号:“您提交的URI包含不允许的字符。”Thorpe-如何处理撇号?您应该在配置文件中修改:$config['allowed_URI_chars']='a-z 0-9~%:\-;到$config['allowed\u uri\u chars']='\'a-z 0-9~%。:\\-';我知道这是一个非常老套的问题,但这让我省去了一些头疼的事——干杯!