首页 > 解决方案 > 通过 PHPmailer 发送邮件时如何在保留波兰字符的同时转义特殊字符?

问题描述

我正在为一个网站制作一个简单的联系表格,但遇到了一个小问题 - 通过 PHPmailer 发送邮件时,我可以在我的表格中传递 HTML 标签、花括号和其他特殊字符,这可能不是真的一个好主意...

问题是 - 我需要保留空格和波兰语字符(ąćęłńóśźż),而且我是正则表达式和 php.ini 的绝对新手

我基本上使用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

感谢所有帮助!


解决的问题:总结

最终遵循Álvaro González 的建议,即使用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);
}

再次感谢大家的帮助!

标签: phpregexescapingphpmailer

解决方案


只需在字符类中添加空格和波兰字符:

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

/u标志对于处理 unicode 字符是强制性的。


推荐阅读