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->quote()
转义特殊字符。
【讨论】:
这也有效。但是,当在输入框中使用撇号时,我收到了 MySQL 错误。知道如何清除它吗? 上面的htmlspecialchars
仅转义数据以用于显示目的。在执行插入 MySQL 之前,再次执行 htmlspecialchars
。
不不不。不要使用 htmlspecialchars 插入数据库。啊。可怕的可怕建议。
@dihakz @bobwienholt 是正确的。您应该改用 mysql_real_escape_string()
或 $pdo->quote()
感谢大家的帮助——现在我只是想提交我的值以转义单引号以插入数据库。那我就金了! :-)以上是关于PHP输出单引号和双引号作为输入元素的值的主要内容,如果未能解决你的问题,请参考以下文章