我正在尝试删除所有特殊字符,例如
()[] {}〜`@#$%^&安培; * _ + = / | ,,;:??><
但是此代码将删除所有规范字符加非英语字符,我只想删除规范字符而非非英语字符。我的意思是只接受英语+非英语,但不接受特殊字符。
preg_replace("/[^A-Za-z0-9\-]/", "-", $_REQUEST["title"]);
答案 0 :(得分:1)
根据评论中的讨论,这可能会让你开始:
<?php
$subject = "This is a string ()[]{}~`@#\$%^&?؟*_+=/|.,،;:' getting stripped.";
$pattern = sprintf('/[%s]/', preg_quote("()[]{}~`@#$%^&?؟*_+=/|.,،;:'", '/'));
$subject = preg_replace($pattern, '', $subject);
echo $subject."\n";
关于sql注入预防你还提到:正如在问题的评论中所说,你必须使用现代数据库适配器(mysqli或PDO)和“预备语句”。您将在文档中找到有关它的说明。其他一切都只是“解决问题”,这根本没有意义。
答案 1 :(得分:1)
使用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"]);