php - 从 MySQL 结果中转义 PHP 中的引号 (PDO)

标签 php mysql stripslashes addslashes

要显示的字符串来自 MySQL 表。我使用 PDO 查询。该字符串包含双引号:

Older spelling (from French). The modernized "petty larceny" is now preferred.

这是字典条目的定义,如果可用的话将显示:

$search_results .= (!empty($english_definition)? "<a class=\"definition\" href=\"#\" data-toggle=\"popover\" rel=\"popover\"
data-content=\"".$english_definition."\">".$english."*</a>" : $english);

由于引号的原因,定义被切到“现代化”一词之后。

我尝试使用addslashes(),但结果是显示单个斜杠,后面没有任何内容。

我还尝试在表字段内添加斜杠,例如

Older spelling (from French). The modernized \"petty larceny\" is now preferred.

如果 PHP 代码中没有 stripslashes(),则仅显示第一个反斜杠,后面不显示任何内容。

当我添加 stripslashes() 时,“modernized”一词后面不显示任何内容。

所以,这就是我陷入困境的地方。

附加代码: 这就是我插入新术语和定义的方式。我为可能存在引号的输入添加了 htmlspecialchars() :

        if(isset($_POST['submit'])) {

        $english                = htmlspecialchars($_POST['english']);
        $english_abbr           = $_POST['english_abbr'];
        $variant                = $_POST['variant'];
        $bulgarian              = htmlspecialchars($_POST['bulgarian']);
        $bulgarian_abbr         = $_POST['bulgarian_abbr'];
        $theme_id               = $_POST['theme_id'];
        $english_definition     = htmlspecialchars($_POST['english_definition']);
        $bulgarian_definition   = htmlspecialchars($_POST['bulgarian_definition']);

        // Check if an entry already exists
        $exists = $db->prepare("SELECT * FROM ".DICTIONARY_TABLE." WHERE english = :english AND theme_id = :theme_id ");
        $exists->execute(array(':english' => $english, ':theme_id' => $theme_id));
        $count = $exists->rowCount();
        if($count > 0) {
            echo "<h3 style=\"color:navy; background:transparent;\">&#8658; An entry in the same theme already exists.</h3>";
        }
        else {
            $insert = $db->prepare("INSERT INTO ".DICTIONARY_TABLE." 
                                    (english, english_abbr, variant, bulgarian, bulgarian_abbr, theme_id)
                                    VALUES
                                    (:english, :english_abbr, :variant, :bulgarian, :bulgarian_abbr, :theme_id)");
            $insert->execute(array(':english'           => $english, 
                                    ':english_abbr'     => $english_abbr,
                                    ':variant'          => $variant,
                                    ':bulgarian'        => $bulgarian,
                                    ':bulgarian_abbr'   => $bulgarian_abbr,
                                    ':theme_id'         => $theme_id));

            if($insert) {
                echo "<h4 style=\"color:green; background:transparent;\">&#8658; Term \"$english\" inserted successfully.</h4>";

                if(!empty($english_definition) || !empty($bulgarian_definition)) {      
                    $insert_id = $db->lastInsertId();
                    $insert_def = $db->prepare(
                            "INSERT INTO ".DICTIONARY_DEFINITIONS." 
                            (term_id, english_definition, bulgarian_definition)
                            VALUES
                            (:term_id, :english_definition, :bulgarian_definition)");
                    $insert_def->execute(array(
                            ':term_id' => $insert_id, 
                            ':english_definition'   => $english_definition,
                            ':bulgarian_definition' => $bulgarian_definition));

                    if($insert_def) {
                        echo "<h4 style=\"color:green; background:transparent;\">&#8658; Definition(s) inserted successfully.</h4>";
                    }
                    else {
                        echo "<h4 style=\"color:red; background:transparent;\">&#8658; There was a problem inserting the definition(s)!</h4>";
                    }
                }

                unset($_POST); $_POST = array();
            }
            else { 
                echo "<h4 style=\"color:red; background:transparent;\">&#8658; There was a problem executing the query: </h4>";
            }
        }
        include("insert_form.php");
    }
    else {
        include("insert_form.php");
    }

最佳答案

将其保存到数据库时使用 htmlspecialchars() 函数,并在想要再次回显时使用 htmlspecialchars_decode() 函数。

Link to htmlspecialchars() function

Link to htmlspecialchars_decode() function

关于php - 从 MySQL 结果中转义 PHP 中的引号 (PDO),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37206020/

相关文章:

php - 遇到 PHP 错误严重性 : Notice Message: Undefined offset: 0

php - MySQL + PHP : select multiple rows on a join, 然后更新那些行/插入新行

mysql - 对带重定向和不带重定向的 `mysql -e` 输出格式有点好奇

PHP mysql_real_escape_string() -> stripslashes() 留下多个斜杠

php - 如何在 php 中使用我域内的域重定向 url

php - Perl 'bless' 到 PHP?

php - FullCalendar 和 json 事件

php - PDO:获取结果时去除斜线

php - 将十六进制数据从 PHP 传递到外部程序

php - 哪个 IDE 可以正确重构(重命名)Zend Framework 2 类?