0

我正在使用 2.4.7,并且我想对两个包含价格的字段进行一些验证(例如,1 欧元或 2 欧元对应 3 欧元)。最初我认为也许我需要求助于验证用户输入,但答案表明这是一个数据库问题。

SilverStripe 中的编码默认为 ASCII,它转换了诸如欧元符号之类的符号。最后我需要添加

$this->response->addHeader("Content-Type", "application/json; charset='utf-8'");

到控制器中的init方法。这更正了编码问题,并防止了一个 hacky 变通办法的发生。非常感谢您对此的见解。

谢谢

4

2 回答 2

2

我假设您想在 CMS 中执行此操作。如果是这种情况,最简单的方法可能是创建一个新类,该类扩展TextField该类并添加一个public function validate()执行验证的方法(参见CreditCardField 类的示例)。

class FancyCurrencyField extends TextField {
    public function validate($validator) {
        // Do your validation
        if ($invalid) {
            $validator->validationError(
                $this->name,
                "Please don't use currency symbols.",
                "validation",
                false
            );
            return false;
        }
        return true;
    }
}

创建类后,您可以修改getCMSFields()函数中的表单字段,DataObject并使用新类代替TextField.

话虽如此,感觉像输出编码而不是输入验证是问题的根本原因。我会检查以确保一切都设置为使用 UTF-8。

于 2012-10-24T10:05:36.743 回答
0

我遇到了 PHP 函数 substr 的问题。我只是使用了 mb_substr ,它解决了我的问题。

请查看http://www.silverstripe.org/general-questions/show/11797#post369831

于 2014-08-20T00:55:48.497 回答