PHP:如何清洁用户输入离开UTF-8(俄罗斯,土耳其语,英语)



清洁用户提交了意外或有意垃圾的输入。.我写了以下内容来执行此操作,并有兴趣看到对同一问题的更有效或更好的解决方案。注意:我使用 MySqli准备的语句在这些内容的侧面之后。


第一种情况:用户应该能够输入UTF-8(仅俄罗斯,土耳其语,英语是必要的)字符,'_ _',(这是用于用户清洁"用户名"输入)

输入:

$lang1 = "   $:;/<ŞĞğş4324234şğ_Ğüğsdç<a> #$#@!@^%*&^( <b></b>";
$lang2 = "еукд $ :;363 леВАЛДЖЫу-_жлаывф<em>вфы34234</em>вфывф#@!@^%*&^(&*)(()&^@#!~";
$lang3 = "dasda$RWERs636  da<b>asd_45646asd<em>";


为了清洁这些简单的功能

function clean($s = '')
{
  $c = mb_strtolower((trim($s)), 'UTF-8');
  $c = preg_replace ( '/[^0-9p{Cyrillic}p{Ll}w]/u', '', $c); 
  $c = htmlentities(strip_tags($c), ENT_QUOTES, 'UTF-8');
  return $c;
}

返回我需要的;

şğğş4334şğ_ğüğsdçabb
еукд363левалджыу_жлаывфemвфы34234emвфывф
dasdadabasd_45646asdem



第二种情况:仅允许英文字符,应删除无效的字符和其他UTF-8字符。(这是为了清洁用户的"电子邮件"输入)

输入:

$email1 = "dasda @:;/<ŞĞğ  ВАЛДЖЫуda<b>asd_45646asd<em>.com";
$email2 = "^%(#*$#)$&(237469879şşşdsasadsdasd/||><? ВАЛДЖЫуda<b>asd_45646asd<em> .com";
$email3 = "t est i @coЬm.tr";
$email4 = "&/(/&^+'!+!^+<em>test@com.kz()(  РЛОкуц <em> ";
$email5 = "++ ?ЕНГКУ   teЛОДКУst@mail.уцкru...";
$email6 = " ?ЕНГКУ   teЛОДКУst@.уцкua";
$email7 = " ++ fake.some--one+tag@gmail.com++";

这部分是针对电子邮件的,只应接受英语字符,我写了以下功能来清洁和验证;

function clean_email($s = '')
{
  $c = mb_strtolower((trim($s)), 'UTF-8');
  $c = filter_var(strip_tags($c), FILTER_SANITIZE_EMAIL);
  $c = preg_replace ('/(?i)[^a-z.@_-+d]|[.@]{2,}/u', '', $c);
  $c = preg_replace ( '/^[+.-@]{1,}|[+.-@]{1,}$/u', '', $c);
  return $c;
}       
function valid ($v = '') 
{      
  if (filter_var($v, FILTER_VALIDATE_EMAIL) == TRUE) {return 'valid';} else {return 'false';}
}

访问via时:

echo clean_email($email1).' : '.valid(clean_email($email1)).'<br/>';  

返回我需要的

dasda : false
dsasadsdasd : false
testi@com.tr : valid
test@com.kz : valid
test@mail.ru : valid
testua : false
fake.some--one+tag@gmail.com : valid


P.S.

- 在此电子邮件输入字段中,我不需要完整的UTF-8/RFC合规性,也不需要包含所有可能包含在电子邮件中的特殊字符。我更喜欢在最初的问题中更加限制和说明,以及该功能的作用。这里的想法更多是要摆脱错误的字符,而不是验证电子邮件,在在线网站中,我宁愿不纠正任何内容,而只是丢下错误。


- 在"干净的电子邮件"功能中更新了正则表达式,以包括 和 - 字符。

https://code.google.com/p/owasp-esapi-php/

不要写自己的安全控件!在为每个Web应用程序或Web服务开发安全控制时,重新发明了车轮会导致时间浪费和大量的安全孔。OWASP企业安全API(ESAPI)工具包可帮助软件开发人员防止与安全相关的设计和实现缺陷。

$email1 = 'fake.someone+tag@gmail.com'; // this is perfectly valid email
echo clean_email($email1).' : '.valid(clean_email($email1));
// outputs: fake.someonetag@gmail.com : valid
// and you'll be emailing the wrong person.

相关内容

  • 没有找到相关文章