PHP (preg_replace) 去除非英文的特殊字符
PHP (preg_replace) remove special character not non-english
我正在尝试删除所有特殊字符,例如
()[]{}~`@#$%^&*_+=/|.,،;:?؟><
但是此代码将删除所有规范字符和非英语字符,我只想删除规范字符而不是非英语字符。我的意思是只接受英文+非英文但不接受特殊字符。
preg_replace("/[^A-Za-z0-9\-]/", "-", $_REQUEST["title"]);
作为评论中讨论的结果,这可能会让您入门:
<?php
$subject = "This is a string ()[]{}~`@#$%^&?؟*_+=/|.,،;:' getting stripped.";
$pattern = sprintf('/[%s]/', preg_quote("()[]{}~`@#$%^&?؟*_+=/|.,،;:'", '/'));
$subject = preg_replace($pattern, '', $subject);
echo $subject."\n";
关于 sql 注入预防,您还提到:如问题评论中所述,您必须使用现代数据库适配器(mysqli 或 PDO)和 "prepared statements".你会在文档中找到关于它的解释。其他一切都是 "fixing the problem only a bit" ,这根本没有意义。
使用 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"]);
我正在尝试删除所有特殊字符,例如
()[]{}~`@#$%^&*_+=/|.,،;:?؟><
但是此代码将删除所有规范字符和非英语字符,我只想删除规范字符而不是非英语字符。我的意思是只接受英文+非英文但不接受特殊字符。
preg_replace("/[^A-Za-z0-9\-]/", "-", $_REQUEST["title"]);
作为评论中讨论的结果,这可能会让您入门:
<?php
$subject = "This is a string ()[]{}~`@#$%^&?؟*_+=/|.,،;:' getting stripped.";
$pattern = sprintf('/[%s]/', preg_quote("()[]{}~`@#$%^&?؟*_+=/|.,،;:'", '/'));
$subject = preg_replace($pattern, '', $subject);
echo $subject."\n";
关于 sql 注入预防,您还提到:如问题评论中所述,您必须使用现代数据库适配器(mysqli 或 PDO)和 "prepared statements".你会在文档中找到关于它的解释。其他一切都是 "fixing the problem only a bit" ,这根本没有意义。
使用 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"]);