我的Drupal表单中有一个文本字段,在保存到数据库之前需要进行清理,该字段用于自定义名称,我预计有些用户可能希望写入例如“Andy 's”或“John' s home”。
问题是,当我通过check_plain()函数运行字段值时,撇号被转换为'
-这意味着Andy's code
变成了Andy's code
。
我可以从check_plain()
函数中排除撇号,或者用其他方法来处理这个问题吗?我尝试过在format_string()
函数中进行 Package ,但是不起作用:
$nickname = format_string(check_plain($form_state['values']['custom_name'], array(''' => "'")));
谢谢。
2条答案
按热度按时间ovfsdjhp1#
不,你不能排除处理check_plain()中的某个字符,因为它只是将你的文本传递给php函数htmlspecialchars(),并带有ENT_QUOTES标志:
ENT_QUOTES意味着htmlspecialchars()将把双引号和单引号都转换成HTML实体。
除了check_plain(),你可以使用htmlspecialchars()和ENT_COMPAT(这样它就不会使用单引号):
但这会引起一些安全问题。
另一种选择是编写自定义正则表达式来正确地净化输入。
ct3nt3jp2#
我一直有点担心T-34提到的安全问题,所以我试着写了一个工作正常的变通函数,这个函数去掉了撇号,然后对每个部分运行check_plain(),再把它拼凑起来,重新插入撇号。
该函数为:
一个示例调用是:$昵称=我的消毒($昵称);