从cakephp中的输入中删除多余的空格

时间:2013-01-29 04:32:32

标签: php postgresql cakephp-1.3

我有一个html表单来保存cakephp中的项目。我想限制用户保存相同的项目名称。如果任何正文类型的相同项目名称在模型中应用了“唯一”验证,但是如果有人在项目名称之前或之后输入相同的名称,则它接受它并存储到数据库中。问题就是问题。我想在保存之前删除多余的空格。

请帮忙。

4 个答案:

答案 0 :(得分:8)

从用户输入中移除空格的最佳位置,即trim()位于控制器级别的beforeFilter()回调中。对于PHP5 +,数组函数array_walk_recursive()使这项工作变得非常简单。

例如:

public function beforeFilter()
{
    parent::beforeFilter();

    // remove leading and trailing whitespace from posted data
    if (!function_exists('trimItem')) {
        function trimItem(&$item,$key){
            if (is_string($item)){
                $item = trim($item);    
            }
        }
    }       
    array_walk_recursive($this->request->data, 'trimItem');                     
}

将此代码放入AppController,并在所有表单上修剪用户输入

希望这有帮助

答案 1 :(得分:3)

使用trim来修剪两边的字符串

参考:http://php.net/manual/en/function.trim.php

trim($str);

答案 2 :(得分:3)

正如@Prasantn Bebdra的答案的补充,因为提问者不知道在哪里以及如何使用trim()

修剪控制器中POST的所有数据(就在调用Model->save()之前):

foreach ($this->data as $key => $value) {
    $this->data[$key] = trim($value);
}

你也可以在Model中使用{{1}}中的一个,例如callbacksbeforeValidate(),在你的情况下使用beforeValidate应该更好你可能还想在之后验证这些数据。

您还应该通知用户输入将被修剪,也可能在客户端进行此类修剪(在POST之前) - 检查beforeSave()

答案 3 :(得分:0)

通过研究,我认为最好的解决方案是如果您的数据采用数组格式,然后尝试使用此=> Stackoverflow: How to trim white spaces of array values in php

同时,如果您的数据不是数组,那么您可以简单地使用:

$data = trim($data);