shgen 发表于 2013-1-14 10:40:31

slug里输入中文无效。以及中文url无效

本帖最后由 shgen 于 2013-1-14 10:46 编辑

在这个手册里:
http://codeigniter.org.cn/user_g ... ate_news_items.html

第一个问题:slug里输入中文无效
$slug = url_title($this->input->post('title'), 'dash', TRUE);
我在title里输入中文,但看到数据库里,值是空的。
也就是中文无效
-------------

第二个问题:中文url无效
然后我直接在数据库里改slug的值为中文。
然后打开www.yoursite.com/index.php/news/新闻标题
结果是404错误。
用的路由是:
$route['news/(:any)'] = 'news/view/$1';

请问错在哪里?













Hex 发表于 2013-1-14 10:45:38

第一,url_title() 肯定是不支持中文的,因为老外不会汉语拼音,他们也不会帮你把中文翻译成英文,呵呵
第二,URL不能包含中文,建议改用 GET 传参以支持中文。

shgen 发表于 2013-1-14 11:12:55

我试了下,url可以有中文。
比如我现在把slug改成“新闻”

但是在 public function get_news($slug = FALSE){


        if ($slug === FALSE)
        {
                $query = $this->db->get('news');
                return $query->result_array();
        }
       //$slug=urlencode($slug);
        //%E6%96%B0%E9%97%BB
       //%25E6%2596%25B0%25E9%2597%25BB
       $slug='新闻';
        echo $slug;
       

        $query = $this->db->get_where('news', array('slug' => $slug));
        return $query->row_array();
}

里会按%E6%96%B0%E9%97%BB去查询。
但实际要数据库里是“新闻”,所以404
我用$slug=urlencode($slug);也转不成“新闻”

怎么办?

shgen 发表于 2013-1-14 11:37:33

找到原因了
写反了,应该是
$slug=urldecode($slug);
而不是$slug=urlencode($slug);

Hex 发表于 2013-1-14 12:59:12

shgen 发表于 2013-1-14 11:37 static/image/common/back.gif
找到原因了
写反了,应该是
$slug=urldecode($slug);


不建议在 URI 分段形式的 URL 中使用中文,这样既不好看,也不方便使用。
还是建议放在 GET 传参中。

shgen 发表于 2013-1-14 14:23:00

GET 传参中? 不是很明白。
因为现在这个是直接从新闻列表里取出来的。
如:
<a href="news/新闻1">新闻1</a>
<a href="news/新闻2">新闻2</a>
<a href="news/新闻3">新闻3</a>
<a href="news/新闻4">新闻4</a>

而 href="news/新闻1"里的新闻1,新闻2。。。。等等就是slug的值。

meady 发表于 2013-1-15 11:49:00

可以用id吧,只不过后边的新闻1,新闻2作为GET方法的参数,无实际用途,不过用也行。news/1?s=新闻1
页: [1]
查看完整版本: slug里输入中文无效。以及中文url无效