PHP(preg_replace)删除特殊字符而非非英语

时间:2015-03-14 09:00:52

标签: php preg-replace

我正在尝试删除所有特殊字符,例如

  

()[] {}〜`@#$%^&安培; * _ + = / | ,,;:??><

但是此代码将删除所有规范字符加非英语字符,我只想删除规范字符而非非英语字符。我的意思是只接受英语+非英语,但不接受特殊字符。

preg_replace("/[^A-Za-z0-9\-]/", "-", $_REQUEST["title"]);

2 个答案:

答案 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"]);