Cakephp消毒和特殊字符

时间:2012-02-01 09:25:35

标签: php cakephp encoding

我在字符串上使用sanitize :: paranoid但是我需要排除一些特殊字符,但它似乎不起作用。

$content=sanitize::paranoid($content,array('à',' '));

我已经将我的文件编码从ansi更改为utf8,但是cakephp并不喜欢它,所以我需要找到另一种方式。

该数组应包含要从清理中排除的字符列表,但它会不断删除“à”,并且我希望这些字符位于最终字符串中。

3 个答案:

答案 0 :(得分:0)

Sanitize:paranoid是一个简单的preg_replace$allow只是其他字符,已转义):

preg_replace("/[^{$allow}a-zA-Z0-9]/", '', $string);

如您所见,paranoid非常偏执......默认情况下不接受非ascii字母。

您拥有à的文件可能保存在其他编码中(在Windows上工作?)

无论如何,如果你想要,你可以使用/[^\p{L}]/u编写一个更好的过滤器,它排除任何语言中的字母。

答案 1 :(得分:0)

取自Sanitize :: paranoid函数:

cleaned = preg_replace("/[^{$allow}a-zA-Z0-9]/", '', $string);

因为您的角色(à)不在此范围内,所以不会返回。 如果您正在使用Cake 2.x,则可以覆盖app文件夹中的Sanitize类 并替换所有出现的:

a-zA-Z0-9

使用:

\w

这应该返回重音字符(它对我来说)。你也可以看一下 multibyte functions如果您愿意,但如果您正在构建CMS,则可能会出现问题。

答案 2 :(得分:0)

必须是一些特殊的编码问题,这是Cakephp偏执者不知道的

Sanitize::paranoid($badString, array(' ', '@')); @ is the allowed char

应该有效。我自己试过这个例子