我在字符串上使用sanitize :: paranoid但是我需要排除一些特殊字符,但它似乎不起作用。
$content=sanitize::paranoid($content,array('à',' '));
我已经将我的文件编码从ansi更改为utf8,但是cakephp并不喜欢它,所以我需要找到另一种方式。
该数组应包含要从清理中排除的字符列表,但它会不断删除“à”,并且我希望这些字符位于最终字符串中。
答案 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
应该有效。我自己试过这个例子