Yii: URL管理规则中命名参数使用注意点

问题描述

Yii支持URL命名参数这样的模式匹配方式,具体参见

http://www.yiiframework.com/doc/guide/1.1/en/topics.url


我们可以把这些规则放在配置文件里,但不够弹性,不能在后台方便的进行管理变更。

那么可以把它们放到数据库里面,建立一个url_rules表,但由于Yii的URL命名参数格式比较特别:

array(
    'post/<id:\d+>'=>'post/read',
    'post/<year:\d{4}>/<title>'=>'post/read',
)

其中使用了大于>和小于<号,使用PHP字符串来处理这些规则,在显示和调试时会有些麻烦,因为<>是html的markup标记符号,

PHP由于本来就是用来解析HTML标记而发明的,所以PHP的字符串把这些符号当作HTML元素来处理,这样无法像正常字符那样被打印和显示。


规避方法

有3种方法来处理这样的情况:

1. 使用标记所对应的HTML Entity(http://en.wikipedia.org/wiki/HTML_entities)来描述,比如常见的

&gt;     : > (greater-than)
&lt;     : < (less-than)
&amp;    : & (ampersand)
<?php
$rule = 'post&lt;id&gt;';
echo $rule;
?>

这样可以被打印为post<id>


2.使用htmlspecialchars()函数对特殊标记进行处理再输出:

$rule = 'post<id>';

echo htmlspecialchars($rule)


3.把<>替换为[]来存储,这样打印输出比较方便,在路由规则处理或者createUrl的时候使用strtr($pattern, '[]','<>')即可。


by iefreer

你可能感兴趣的:(html,PHP,String,yii,Markup)