PHP删除除撇号外的所有非字母数字字符

时间:2013-01-20 10:53:05

标签: preg-replace str-replace trim alphanumeric apostrophe

$keywords = explode("\n",$_POST['keywords']);

//Inserting into Database
foreach($keywords as $key => $keyword){
    $keyword = strtolower(trim($keyword));
    $keyword = preg_replace("/[^A-Za-z0-9' ]/", "", $keyword);
    $keyword = preg_replace("/\s+/", " ", $keyword);
    $insertkeywords = "INSERT IGNORE INTO kwdb (keyword) VALUES ('$keyword')";
        mysql_query($insertkeywords);
}

我不能为我的生活找出为什么当我在下面有一个撇号时,这段代码不会将关键字插入数据库:

"/[^A-Za-z0-9' ]/"

但当我删除它时:

"/[^A-Za-z0-9 ]/"

此脚本将记录插入数据库。

我想做什么? 我在表格上有一个textarea。对于新行上的每个关键字,我会根据\ n进行爆炸。我想从关键字中删除所有非字母和非数字字符,但不希望删除撇号。

我基本上希望所有关键字都是小写的,包括前导,尾随和额外的空格 - 将2个或更多空格修剪为一个 - 删除除了撇号之外的任何非字母和非数字字符。

2 个答案:

答案 0 :(得分:0)

你需要转义你的关键字:$ insertkeywords =“INSERT IGNORE INTO kwdb(keyword)VALUES('”。mysql_real_escape_string($ keyword)。“')”;

答案 1 :(得分:0)

谢谢clover。如果没有你的帮助,我需要花费很多时间来确定这一点!我最终使用mysqli_real_escape_string而不是mysql_real_escape_string,因为mysql_real_escape_string表示从PHP 5.5.0开始不推荐使用它。结果,我不得不改变一下,但到目前为止,下面的代码对我来说似乎很有用(如果有其他人遇到这个问题)。

$con = mysqli_connect("localhost","username","password");
if (!$con)
  {
  die('Could not connect: ' . mysqli_error());
  }
else
    {
echo "Connected Successfully!";
}
//select database
mysqli_select_db($con, "test");

$keywords = explode("\n",$_POST['keywords']);

//Inserting into Database
foreach($keywords as $key => $keyword){
    $keyword = preg_replace("/[^A-Za-z0-9' ]/", " ", $keyword);
    $keyword = preg_replace("/\s+/", " ", $keyword);
    $keyword = strtolower(trim($keyword));
    //$insertkeywords = "INSERT IGNORE INTO kwdb (keyword) VALUES ('$keyword')";
    $insertkeywords = "INSERT IGNORE INTO kwdb (keyword) VALUES ('".mysqli_real_escape_string($con, $keyword)."')";
        mysqli_query($con, $insertkeywords);
}