我试着删除所有特殊的角色
()[]{}`@#$%^&*_+=/،;:?؟>< .,
但此代码将删除所有规范字符加上非英语字符,我只希望删除规范字符而不是非英语字符。我的意思是只接受english+non英语,但不接受特殊字符。
preg_replace("/[^A-Za-z0-9\-]/", "-", $_REQUEST["title"]);
发布于 2015-03-14 11:18:29
使用unicode属性:
preg_replace("/[^\p{L}\p{N}]/u", "-", $_REQUEST["title"]);
这将取代任何字符不是字母,也不是数字的破折号。
编辑评论:
$regex = array('/[^\p{L}\p{N}\s]/u', '/\s/');
$repl = array('', '-');
preg_replace($regex, $repl, $_REQUEST["title"]);
发布于 2015-03-14 09:36:40
作为评论中讨论的结果,这可能会让您开始:
<?php
$subject = "This is a string ()[]{}~`@#\$%^&?؟*_+=/|.,،;:' getting stripped.";
$pattern = sprintf('/[%s]/', preg_quote("()[]{}~`@#$%^&?؟*_+=/|.,،;:'", '/'));
$subject = preg_replace($pattern, '', $subject);
echo $subject."\n";
关于sql注入预防,您还提到了:正如对问题的注释中所说的,您必须使用现代数据库适配器(mysqli或PDO)和“准备好的语句”。您将在文档中找到对此的解释。其他的一切都是“只解决一点问题”,这根本没有意义。
https://stackoverflow.com/questions/29047203
复制相似问题