如何用" - "或"_"替换URL""?

Moh*_*ali 4 url url-rewriting yii

在YII中如果标题中有空格用于url,则默认情况下空格将替换为"+"符号.像这样的东西:

www.domain.com/event/view/id/ Dj + Robag + Ruhme

我想要做的是,我想用" - "(短划线符号)或"_"(下划线)替换"+"符号.像这样的东西:

www.domain.com/event/view/id/ Dj-Robag-Ruhme

要么

www.domain.com/event/view/id/ Dj_Robag_Ruhme

现在我的urlManager是:

'urlManager'=>array(
    'urlFormat'=>'path',
    'showScriptName'=>false,
    'caseSensitive'=>false,
    'rules'=>array(
        //'<controller:\w+>/<id:\d+>'=>'<controller>/view',
        //'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
        //'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
        ),
),
Run Code Online (Sandbox Code Playgroud)

soj*_*oju 7

好吧,没有什么奇怪的,因为Yii urlencode用来编码url参数.

第一种方法

您可以在模型中处理此问题,例如:

public function getUrl()
{
  return Yii::app()->createUrl('/model/view', array(
    'id'=>str_replace(' ', '-', $this->id),
  ));
}
Run Code Online (Sandbox Code Playgroud)

别忘了:

  • 替换model为您的模型名称,
  • 使用此方法获取模型网址,
  • 修改控制器中的视图操作:

    public actionView($id)
    {
        $id = str_replace('-', ' ', $id);
        // .....
    }
    
    Run Code Online (Sandbox Code Playgroud)

第二种方法

你可以使用自己的CUrlRule类:

http://www.yiiframework.com/doc/guide/1.1/en/topics.url#using-custom-url-rule-classes