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

Posted

技术标签:

【中文标题】PHP输出单引号和双引号作为输入元素的值【英文标题】:PHP to output single and double quotes as a value for an input element 【发布时间】:2013-06-07 12:20:32 【问题描述】:

我有一个值 ($title) 存储在 mysql 中,并且正在使用 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 

当显示和更新该变量时,我不知道如何获得正确的值以显示并与表单一起提交。

【问题讨论】:

【参考方案1】:

尝试使用htmlspecialchars。这将转义您标题中的 "。

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

【讨论】:

这太棒了!如果在输入字段中插入撇号,现在如何让它不出错? 我不完全理解您的评论。插入撇号时会出现什么错误。 1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 1 行的 'This is the description updated "with" quotes', date_of_call='06/11/2013', time_' 附近使用 这是一个 SQL 错误,这意味着您已对sql injection attacks 开放。请勿在生产环境中使用此错误代码,否则您的服务器 + 站点将被彻底摧毁。 不...在将数据插入数据库时​​不要使用 htmlspecialchars。请改用 mysql_real_escape_string。【参考方案2】:

在引用前加上\

echo "This is a \" test";

【讨论】:

我也有类似的情况,我不需要使用 htmlspecialchar 或 stripslashes 或 addlashes,只需将值的变量周围的引号或双引号转义即可。【参考方案3】:

改变这一行。

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

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

【讨论】:

然后使用 htmlspecialchars。【参考方案4】:

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

【讨论】:

当我尝试这个时,我的输入字段中只得到'This',而$title 的值实际上是'This is a test of the title field。它包含一个双引号“”“'(单引号实际上不是字符串的一部分,我只用它来显示字符串的开始和结束位置。)【参考方案5】:

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

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

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

【讨论】:

这也有效。但是,当在输入框中使用撇号时,我收到了 MySQL 错误。知道如何清除它吗? 上面的 htmlspecialchars 仅转义数据以用于显示目的。在执行插入 MySQL 之前,再次执行 htmlspecialchars 不不不。不要使用 htmlspecialchars 插入数据库。啊。可怕的可怕建议。 @dihakz @bobwienholt 是正确的。您应该改用 mysql_real_escape_string()$pdo-&gt;quote() 感谢大家的帮助——现在我只是想提交我的值以转义单引号以插入数据库。那我就金了! :-)

以上是关于PHP输出单引号和双引号作为输入元素的值的主要内容,如果未能解决你的问题,请参考以下文章

PHP单引号和双引号区别

PHP单引号和双引号的区别

php字符串单引号和双引号的区别

php中单引号和双引号的区别,哪个速度更快?为啥?

php操作MySQL中单引号与怎么处理?

PHP和sql语句中单引号和双引号的区别