2012-02-01 126 views
0

我對一個字符串使用sanitize :: paranoid,但我需要排除一些特殊字符,但它似乎不工作。Cakephp消毒和特殊字符

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

我改文件的編碼從ANSI爲utf8,但CakePHP會不喜歡它,所以我需要找到另一種方式。

該數組應該包含要從消毒處理中排除的字符列表,但它會一直刪除「à」,並且我希望這些字符位於最終字符串中。

+0

哪個Cake版本你使用..? – 2012-02-01 09:38:01

+0

你有PCRE的unicode支持嗎? – 2012-02-01 10:08:12

+0

@BarryChapman這是一個cms,我們無法對服務器配置做出假設 – Chobeat 2012-02-01 10:20:49

回答

0

Sanitize:paranoid是一個簡單的preg_replace$allow只是其他字符,轉義):

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

正如你所看到的,paranoid是很偏執......默認不接受非ASCII字符。

,你有à可能是保存在另一種編碼的文件(在Windows上工作?)

無論如何,如果你願意,你可以通過使用/[^\p{L}]/u,它排除了任何lanaguage字母寫出更好的過濾器。

+0

謝謝,這項工作幾乎完美,但它也取代了空白。我對正則表達式不太擅長,我怎麼能排除空格呢? – Chobeat 2012-02-01 12:31:46

+0

在'''之前加一個空格,就這些了 – ori 2012-02-01 14:08:15

0

從消毒兩者::偏執功能:

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

因爲你的性格(A)不在此範圍內,將不予退還。 如果你使用的蛋糕2.X可以覆蓋消毒類的app文件夾 和替換所有出現:

a-zA-Z0-9 

有:

\w 

這將返回重音符號(它對我來說)。如果你喜歡,你也可以看看 multibyte functions,但如果你正在構建一個CMS,這可能是一個問題。

0

它必須是CakePHP的偏執犯規一些特殊的編碼問題知道

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

應該工作。我自己嘗試過這個例子