PHP 输出单引号和双引号作为输入元素的值


PHP to output single and double quotes as a value for an input element

我有一个存储在MySQL中的值($title(,并且正在使用PHP调用以插入输入元素的值中。问题是当使用单引号或双引号时,输入字段的值在该点终止。

应该发生的行为是输入字段应与$title变量中的数据完全填充,以便在更新表单时,引号保持不变。

这是 PHP:

<?php
    echo '<input type=text size=91 name=title value="'.stripslashes($title).'">';
?>

现在,这里有一个典型的问题:如果值$title

this is a test " of what occurs with a quote
我回显

变量,它正确回显到

this is a test " of what occurs with a quote

但是,在输入字段中使用时,它呈现为:

<input value="this is a test " of what occurs with a quote">

第一个 " 终止字段的值,导致新值为:

this is a test 

我对如何获得正确的值以显示并与表单一起提交感到困惑,当显示和更新该变量时。

尝试使用 htmlspecialchars。这将转义" in yout 标题。

value="'.htmlspecialchars($title).'">

引号前加上一个'

echo "This is a '" test";

更改此行。

<input type=text size=91 name=title value="'.stripslashes($title).'">

<input type=text size=91 name=title value='''.stripslashes($title).'''>

你为什么要跑stripslashes()? 运行addslashes()(相反的函数(将解决此特定问题,但更好的方法是在输出标题的任何位置使用htmlentities($title, ENT_COMPAT, 'utf-8')(或者,如果您的结构允许,在存储数据时(。

执行stripslashes后,应使用 htmlspecialchars 对特殊字符进行转义。这避免了诸如","等字符可能会造成的混乱。

<input type=text size=91 name=title value="'.htmlspecialchars(stripslashes($title)).'">

上面的代码片段只会出于显示目的修复它。但是,在运行 SQL 查询之前,当提交发生时,必须使用 mysql_real_escape_string()$pdo->quote() 来转义特殊字符。