用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3157|回复: 6
收起左侧

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

[复制链接]
发表于 2013-1-14 10:40:31 | 显示全部楼层 |阅读模式
本帖最后由 shgen 于 2013-1-14 10:46 编辑

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

第一个问题:slug里输入中文无效
  1. $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';

请问错在哪里?













发表于 2013-1-14 10:45:38 | 显示全部楼层
第一,url_title() 肯定是不支持中文的,因为老外不会汉语拼音,他们也不会帮你把中文翻译成英文,呵呵
第二,URL不能包含中文,建议改用 GET 传参以支持中文。
 楼主| 发表于 2013-1-14 11:12:55 | 显示全部楼层
我试了下,url可以有中文。
比如我现在把slug改成“新闻”

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


  2.           if ($slug === FALSE)
  3.           {
  4.                   $query = $this->db->get('news');
  5.                   return $query->result_array();
  6.           }
  7.            //$slug=urlencode($slug);
  8.           //%E6%96%B0%E9%97%BB
  9.            //%25E6%2596%25B0%25E9%2597%25BB
  10.            $slug='新闻';
  11.           echo $slug;
  12.          

  13.           $query = $this->db->get_where('news', array('slug' => $slug));
  14.           return $query->row_array();
  15.   }
  16.   
复制代码

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

怎么办?
 楼主| 发表于 2013-1-14 11:37:33 | 显示全部楼层
找到原因了
写反了,应该是
$slug=urldecode($slug);
而不是$slug=urlencode($slug);
发表于 2013-1-14 12:59:12 | 显示全部楼层
shgen 发表于 2013-1-14 11:37
找到原因了
写反了,应该是
$slug=urldecode($slug);

不建议在 URI 分段形式的 URL 中使用中文,这样既不好看,也不方便使用。
还是建议放在 GET 传参中。
 楼主| 发表于 2013-1-14 14:23:00 | 显示全部楼层
GET 传参中? 不是很明白。
因为现在这个是直接从新闻列表里取出来的。
如:

  1. <a href="news/新闻1">新闻1</a>
  2. <a href="news/新闻2">新闻2</a>
  3. <a href="news/新闻3">新闻3</a>
  4. <a href="news/新闻4">新闻4</a>

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

发表于 2013-1-15 11:49:00 | 显示全部楼层
可以用id吧,只不过后边的新闻1,新闻2作为GET方法的参数,无实际用途,不过用也行。news/1?s=新闻1

本版积分规则