Cakephp消毒和特殊字符
我在字符串上使用sanitize::paranoid,但我需要排除一些特殊字符,但它似乎不起作用Cakephp消毒和特殊字符,php,cakephp,encoding,Php,Cakephp,Encoding,我在字符串上使用sanitize::paranoid,但我需要排除一些特殊字符,但它似乎不起作用 $content=sanitize::paranoid($content,array('à',' ')); 我已经将文件的编码从ansi改为utf8,但cakephp并不喜欢它,所以我需要找到另一种方法 该数组应该包含要从清理中排除的字符列表,但它会不断删除“a”,我希望这些字符出现在最后一个字符串中。Sanitize:paranoid是一个简单的preg\u replace($allow只是附加
$content=sanitize::paranoid($content,array('à',' '));
我已经将文件的编码从ansi改为utf8,但cakephp并不喜欢它,所以我需要找到另一种方法
该数组应该包含要从清理中排除的字符列表,但它会不断删除“a”,我希望这些字符出现在最后一个字符串中。
Sanitize:paranoid
是一个简单的preg\u replace
($allow
只是附加字符,转义):
正如你所见,偏执狂
相当偏执。。。默认情况下不接受非ascii字母
您拥有的文件
可能以另一种编码保存(在windows上工作?)
无论如何,如果您愿意,您可以使用
/[^\p{L}]/u
编写一个更好的过滤器,它排除了任何语言中的字母 取自Sanitize::paranoid函数:
cleaned = preg_replace("/[^{$allow}a-zA-Z0-9]/", '', $string);
由于您的字符(a)不在此范围内,因此将不会返回。
如果您使用的是Cake 2.x,您可以覆盖应用程序文件夹中的Sanitize类
并替换所有出现的:
a-zA-Z0-9
与:
这应该返回重音字符(对我来说是这样)。你也可以看看
如果您愿意,但如果您正在构建CMS,这可能是一个问题。这一定是一些cakephp偏执狂不知道的特殊编码问题
Sanitize::paranoid($badString, array(' ', '@')); @ is the allowed char
它应该是有效的。我自己也尝试过这个例子您使用的是哪个蛋糕版本..?您有支持unicode的PCRE吗?@BarryChapman这是一个cms,我们无法对服务器配置进行假设不幸的是,许多解析/清理类严重依赖正则表达式。您可能想检查一下,$content获取数据的数据源也是utf8吗?您是否在app/Config/Database.php中设置了UTF8编码变量(如果来自DB)?谢谢,这几乎可以很好地工作,但它也替换了空格。我对正则表达式不是很在行,我怎样才能排除空白呢?在
]
前面加一个空格,就这样
\w
Sanitize::paranoid($badString, array(' ', '@')); @ is the allowed char