Cakephp дезинфицирующие и специальные символы - PullRequest
0 голосов
/ 01 февраля 2012

Я использую sanitize :: paranoid для строки, но мне нужно исключить несколько специальных символов, но, похоже, это не работает.

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

Я изменил кодировку моего файлаот ANSI до UTF8, но CakePHP не очень нравится, поэтому мне нужно найти другой путь.

Этот массив должен содержать список символов, исключаемых из санации, но он продолжает удалять «à», и я хочу, чтобы эти символы были в последней строке.

Ответы [ 3 ]

0 голосов
/ 01 февраля 2012

Взято из функции Sanitize :: paranoid:

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

Поскольку ваш персонаж (а) не находится в этом диапазоне, он не будет возвращен. Если вы используете Cake 2.x, вы можете переопределить класс Sanitize в папке вашего приложения. и заменить все вхождения:

a-zA-Z0-9

с:

\w

Это должно вернуть акцентированный символ (это для меня). Вы также можете посмотреть на многобайтовые функции , если хотите, но это может быть проблемой, если вы создаете CMS.

0 голосов
/ 28 марта 2013

это должны быть какие-то особые проблемы с кодировкой, которые параноик CakePHP не знает

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

это должно работать.я попробовал этот пример сам

0 голосов
/ 01 февраля 2012

Sanitize:paranoid - это простое preg_replace ($allow - это просто дополнительные символы, экранированные):

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

Как видите, paranoid довольно параноидально ... непринимать не-ASCII письма по умолчанию.

Файл, в котором у вас был à, вероятно, был сохранен в другой кодировке (работает на windows?)

В любом случае, если вы хотите, вы можете написать лучший фильтр с помощью /[^\p{L}]/u,что исключает буквы в любом языке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...