【Drupal】中使用 check_plain 和 t 函数来安全处理字符

从事 Drupal 模块开发特别是主题开发中会经常需要输出或者调用一些文本或字符,但如果是不信任来源的字串如开放给任意用户使用的一些输入等等,这类不信任的字串在输出或使用时请不要大意,未经过滤的不信任字符将给你的项目带来巨大的隐患,好在 Drupal 为我们提供了一个 check_plain 及用于翻译的 t 函数用来优雅的处理这类问题。

关于这两个函数的基本用法可以参考 api.drupal.org 的官方介绍:

t():http://api.drupal.org/api/function/t/6

check_plain():http://api.drupal.org/api/function/check_plain/6

当开发者对于即将使用或输出字串不信任的时候可以使用 check_plain 来安全优雅的过滤掉不安全代码,下面是一些简单的示例及说明,其中 drupal_set_message 是用于向 Drupal 前端返回一段信息的函数,我这里假定 $tText 为来自不信任来源的一段字串,而使用 t 函数的原因是我们需要输出的这段字串可以被翻译:

1、首先是一些未采取任何措施的信息调用及输出:

echo t(‘Some Text For Testing’); //未包含不信任变量时该方法安全;

echo t(“Some $testText For Testing”); //一旦包含不信任内容则不安全;

2、然后我们可以使用 check_plain 来处理不信任的字串如下:

echo check_plain($testText);

echo t(‘Some’),check_plain($testText),t(‘For Testing’); //当然你也可以再 t 一次但事情就变的复杂了;

3、但如此输出的直接结果便是来自用户的字串 testText 无法被翻译,好在 Drupal 的 t 函数使用 @ 占位符为我们提供了另外一种方式来确保安全:

echo t(‘Some @testText For Testing’, array(‘@testText’ => $testText)); //使用这种格式将非常利于翻译人员操作;

当然这里还可以使用其他一些占位符例如 % 和 ! 等等以实现不同的需求如添加 html 代码或者跳过 check_plain 等等,具体可参考 api.drupal.org 上关于 t 函数的一些用法示例,由于 Drupal 里很多函数都已经内置了 check_plain 操作如常用的 l 函数等等所以 ! 占位符也会经常被用到,当然如果 l 函数的 html 属性为 true 时创建链接还是需要过滤的。最后需要补充的是前面所做的努力需要一个前提就是信任的翻译,否则即使代码上无懈可击如果在翻译上出了问题也是很让人头疼的。