7

我有一个存储在 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 

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

4

5 回答 5

12

Try using htmlspecialchars. This will escape the " in yout title.

value="'.htmlspecialchars($title).'">
于 2013-06-11T15:17:24.350 回答
2

\在报价前加一个。

echo "This is a \" test";

于 2013-06-11T15:17:37.490 回答
1

更改此行。

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

<input type=text size=91 name=title value=\''.stripslashes($title).'\'>
于 2013-06-11T15:18:28.150 回答
0

执行后,stripslashes您应该使用htmlspecialchars转义特殊字符。这避免了“,”等字符可能会造成的混乱。

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

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

于 2013-06-11T15:18:24.870 回答
0

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

于 2013-06-11T15:20:00.287 回答