作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com
有时候我们需要处理用户提交的URL。我们首先需要检查用户提供的值是个有效的URL。此时我们可以使用函数check_url(),这个函数首先过滤掉恶意的协议,接着使用check_plain()来处理URL,代码如下:
function check_url($uri) {
return check_plain(drupal_strip_dangerous_protocols($uri));
}
此时由于我们使用了check_plain,所以返回的值不能用作drupal_attributes()里面的属性值。如果我们需要传递给drupal_attributes,那么可以直接调用drupal_strip_dangerous_protocols。
如果我们只是想验证一下URL的有效性,此时可以使用valid_url()。它是按照RFC 3986标准来验证URL的。如果URL通过了测试,那么它返回TRUE,否则返回FALSE。需要注意的是,通过语法检查的URL也不一定安全。
如果你想输出一个URL时,可以使用函数url(),它在处理url时调用了drupal_encode_path(),从而实现对Drupal路径的编码。drupal_encode_path()对PHP的rawurlencode()函数做了封装。为了好看,没有对斜杠进行转义。
function drupal_encode_path($path) {
return str_replace('%2F', '/', rawurlencode($path));
}
Drupal就是这样,很多时候不使用PHP自身的API函数,而是根据自己的需要,在上面做一些封装处理。这种情况很多,除了上面的drupal_encode_path,常见的还有drupal_substr,对substr做了封装,drupal_strlen对strlen做了封装。