You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

表单输入单/双引号致程序异常,寻求转义/实体编码解决方案

解决表单输入引号导致程序异常的问题

我来帮你搞定这个表单输入引号就炸的问题~首先咱们先理清根源:你遇到的异常大概率不是数据库存储环节的问题(毕竟你已经用了mysql_real_escape_string()做SQL注入防护),而是把数据输出到HTML页面时,引号和HTML语法冲突导致的——比如把带引号的内容放到<input>的value属性里,会直接破坏HTML结构,引发页面渲染或JS异常。

下面给你针对性的解决方案:

一、核心解决思路:输出时转义为HTML实体

当你从数据库取出数据并展示到页面上时,必须用HTML转义函数把特殊字符(包括单双引号)转换成对应的实体,推荐用htmlspecialchars(),它能直接把'转成&#039;、"转成&quot;,完美解决HTML语法冲突问题。

代码修改示例

假设你查询后要输出某个字段(比如title)到页面的输入框里,原来的写法可能是:

<input type="text" value="<?php echo $row_ver['title']; ?>">

改成下面这样,加上htmlspecialchars()并指定ENT_QUOTES参数(这个参数会同时转义单引号和双引号):

<input type="text" value="<?php echo htmlspecialchars($row_ver['title'], ENT_QUOTES); ?>">

如果是直接输出文本内容到页面,同样可以用这个方法,既能解决引号问题还能避免XSS攻击:

echo htmlspecialchars($row_ver['content'], ENT_QUOTES);

二、关于你提到的其他方法的说明

  • addslashes():这个函数主要是给引号加反斜杠(比如把'变成\'),但它是为PHP字符串解析服务的,不适合用来处理HTML输出,反斜杠在HTML里会变成多余的显示内容,所以不推荐用它解决你的问题。
  • htmlentities():和htmlspecialchars()类似,但它会转义更多的特殊字符(比如重音符号),如果你的内容没有特殊语言需求,htmlspecialchars()足够用且性能更好。

三、额外建议:升级数据库扩展

注意你现在用的mysql_*系列函数已经在PHP 5.5之后被废弃,并且在PHP 7里被移除了,为了代码的安全性和兼容性,建议尽快迁移到mysqli或者PDO,并且使用预处理语句来处理SQL查询,这比手动转义更安全可靠。比如用mysqli的预处理写法:

if (isset($_POST['key'])) {
    mysqli_select_db($dbprotect, $database_dbprotect);
    $stmt = mysqli_prepare($dbprotect, "SELECT * FROM $bloc_news_entreprise WHERE `key` = ?");
    mysqli_stmt_bind_param($stmt, "s", $_POST['key']);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);
    $row_ver = mysqli_fetch_assoc($result);
    // ...后续处理
}

内容的提问来源于stack exchange,提问作者ZeroCool

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:34:10