Как избежать специальных символов при отправке почты через PHPmailer при сохранении польских символов? - PullRequest
0 голосов
/ 20 января 2019

Я делаю простую контактную форму для сайта и столкнулся с небольшой проблемой - при отправке почты через PHPmailer я могу передавать HTML-теги, фигурные скобки и другие специальные символы в моей форме, что, вероятно, не очень хорошая идея ...

Проблема в том, что мне нужно оставить пробелы и польские символы ( ąćęłńóśźż ), а я Абсолютный новичок в регулярных выражениях и php.

Я прибег к использованию preg_replace, делая в основном это:

function clean($string) {
    return preg_replace('/[^A-Za-z0-9\-]/', '', $string);
}

Как и следовало ожидать, это оставляет меня с таким видом мусора:

До preg_replace : https://imgur.com/a/DrJVBNT

После preg_replace : https://imgur.com/a/Q1xIhWI

Вся помощь приветствуется!


Проблема решена: Резюме

Закончено предложением Альваро Гонсалеса об использовании компонента zendEscaper для экранирования тегов HTML,Делайте это, делая это

$inputFieldName = $escaper->escapeHtml($_POST['inputFieldName']);

каждый раз, когда мне нужно убедиться, что HTML не может быть использован, где inputFieldName - ваш <input name=""> атрибут.


Если по какой-то другой причине вам действительно нужно сделать то, что я просил сделать в первую очередь, то есть полностью удалить некоторые символы, но оставить английские и польские буквы, цифры и пробелы, тогда ответ Toto соответствует вашим потребностям:

function clean($string) {
    return preg_replace('/[^A-Za-z0-9ąćęłńóśźżĄĆĘŁŃÓŚŹŻ\s-]/u', '', $string);
}

Еще раз спасибо всем за помощь!

1 Ответ

0 голосов
/ 20 января 2019

Просто добавьте пробелы и польские символы внутри класса символов:

function clean($string) {
    return preg_replace('/[^A-Za-z0-9ąćęłńóśźż\s-]/u', '', $string);
}

Флаги /u обязательны для работы с символами Юникода.

...