【问题标题】:Removing single quotes in PHP在 PHP 中删除单引号
【发布时间】:2014-11-12 02:49:11
【问题描述】:

我在尝试从 php 文档中插入一些数据时遇到了一些问题,直到我得到 2 个包含引号的值,例如:

“Rempli d'étoiles”

我想删除 ' 一个空格甚至什么都没有。

-> "Rempli d etoiles" 这是我的尝试:

$posdeapostrophe = strpos($array, '\'');
if ($posdeapostrophe == false) 
{
    ...
}
else
{
    // it goes in this block when it detects a ', but seems like trim doesnt work as i would

    $newchaine =  trim($array, '\'');
    $sql .=  "INSERT INTO categorie (id_cat,name_cat) VALUES (" . $cpt . ",'" .$newchaine . "'); ";

谢谢!

【问题讨论】:

  • 您也可以尝试为 SQL 上下文转义字符串。或者切换到更新的数据库 API 并为简单起见使用绑定参数。
  • 为什么,它会抛出错误吗? (最有可能是)。逃避你的价值观,或者更好的是,使用prepared statements,或PDO with prepared statements。并且您将能够在您的数据库中输入相同的字符串,而无需使用该额外功能,而且它会更安全。
  • 使用准备好的查询或mysqli_real_escape_string()....mysql_real_esacpe_string(),如果您使用的是旧版本。但请尽快将其更改为至少mysqli
  • str_replace 工作正常。好吧,我是 php 的新手,感谢 pdo 文档,我会检查一下。

标签: php quotes


【解决方案1】:

您可以使用str_replace()

$array = "Some string's";
$posdeapostrophe = strpos($array, "'");
$val = '';
if ($posdeapostrophe !== false)
{
    $val = str_replace("'", "\'", $array);
}
echo $val;

也可以使用strpos()replace() 来代替单引号。

mysqli_real_escape_string($con, $array ); //for mysqli
mysql_real_escape_string($array , $con); //for mysql

【讨论】:

    【解决方案2】:

    你现在做的事情很危险。

    首先,您应该真正使用当前推荐的方法来执行查询,即使用 PDO:http://php.net/manual/en/book.pdo.php

    这将解决引号问题和您当前在代码中引入的巨大安全漏洞(SQLi 漏洞)。

    如果您仍想替换文本中的单引号,您确实可以执行@scrowler 建议的操作:

    $your_string = str_replace("'", "", $your_string);

    但请在与数据库交互时使用 PDO,因为这确实是唯一(安全且推荐)的方式。

    【讨论】:

    • 我会尽快学习并改变我的做法,谢谢你的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-22
    相关资源
    最近更新 更多