2009-12-15 4 views
1

Я уверен, что кто-то это уже использовал, но я не нашел его в поиске на сайте. Прямо сейчас я пытаюсь отфильтровать какой-либо ввод из WYSIWYG, чтобы он удалял символы, такие как: ¢ © ÷ μ · ¶ ± € £ ®§ ™ ¥, но сохраняйте символы HTML. Я пробовал htmlentities и htmlspecialcharacters, но это все еще, кажется, оставляет тех персонажей в такте. Любые уже существующие методы, или у кого-нибудь есть хорошее регулярное выражение, которое справится с этим? Благодаря!PHP Forming Form Input

+0

Каковы символы HTML? – thr

ответ

1

Если вы используете PHP> 5.2.0 Filter, может быть полезно.

+0

Удивительный, фильтр работал отлично. Я все еще разбираюсь в вариантах, поэтому, возможно, я смогу избежать замены строк. Тем не менее, это то, что я делаю сейчас: $ ret = str_replace ("", " ", $ _POST [$ varname]); $ ret = str_replace ("/", "& aslash;", $ ret); $ ret = filter_var ($ ret, FILTER_SANITIZE_URL); $ ret = str_replace (" ", "", $ ret); $ ret = str_replace ("& aslash;", "/", $ ret); – 2009-12-15 15:59:46

0

, что регулярное выражение должно работать:

$ текст = preg_replace ('/ [¢ © ÷ μ · ¶ ± € £ ®§ ™ ¥] * /', '', $ текста);

можно также заменить элементы, как это:

$ плохой = массив ('©', '®'); $ good = array ('©', '®');

$ text = preg_replace ($ bad, $ good, $ text);

+0

Любой способ, которым мне не нужно будет указывать каждый символ, который я хочу удалить, вместо этого просто заменил то, что не является регулярным символом или тегом html/entity? – 2009-12-15 15:14:55

+0

Сначала я использовал htmlspecialchars() или strip_tags(). Если вы хотите заменить плохих символов ничем, просто используйте первое регулярное выражение. – Billy

+0

regex для этого? ты серьезно? –

0

Вы пробовали функцию htmlentities()? Попробуйте так:

$text = htmlentities($text); 

Там в некоторые другие дополнительные параметры, которые вы можете проверить на http://php.net/manual/en/function.htmlentities.php. Возможно, вам придется установить quote_style и charset, по крайней мере.

+0

Я пробовал htmlentites без везения. Вот что я пробовал: $ ret = htmlentities ($ _ POST [$ varname], ENT_NOQUOTES, 'UTF-8', false); По-прежнему возникают странные персонажи, любая идея, если я что-то вникаю туда? – 2009-12-15 15:40:38

+0

О, почему-то я понял, что вы пробовали htmlspecialcharacters(), но не htmlentities(). Виноват. В любом случае, я бы попробовал варианты ISO, перечисленные в моей ссылке, на всякий случай. – jakeboxer

0

htmlentities() и htmlspecialchars() не будут работать для вас, если вы хотите удалить этих символов полностью, а не только их преобразований в HTML сущности.

EDIT

Я просто заметил, что в какой-то момент вы сказали, что вы хотите сохранить HTML сущности. Если это так, используйте htmlentities() !! Он преобразует все эти символы в их эквивалент сущности html. Если вы повторите это, вы все равно увидите символы, которые вы пытались удалить, но если вы просмотрите исходный код, вы увидите вместо него форматированный объект &name;.


Возможно, вам понадобится регулярное выражение для этого, как это ни печально. Большинство PHP-функций пытаются сохранить эти символы для вас в том или ином формате. Удивительно, что они не являются функцией, чтобы удалить их, что я знаю, по крайней мере!