You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

数据库特殊字符显示异常:仅显示部分内容的技术求助

问题分析与解决方案

看起来你遇到的问题是特殊字符&导致字符串被截断——在HTTP请求里,&默认是参数分隔符,当你提交包含&的开发商名称时,如果没有正确处理编码,服务器只会接收到&之前的部分(也就是Tan)。结合你的代码片段,咱们可以从这几个方向解决:

1. 前端提交时确保参数编码正确

如果是通过HTML表单提交数据:

  • 给表单加上accept-charset="UTF-8"属性,保证编码统一;
  • 如果是用AJAX提交,一定要用encodeURIComponent()developer参数编码,避免&被解析成参数分隔符,示例代码:
    const developerName = "Tan & Tan Developments";
    fetch('你的处理脚本.php', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
      },
      body: `developer=${encodeURIComponent(developerName)}`
    });
    

2. 后端接收参数时做兼容处理

即使前端做了编码,后端也可以显式解码确保内容完整(POST请求下PHP通常会自动处理,但显式处理更稳妥):

$developer = isset($_POST['developer']) ? urldecode($_POST['developer']) : '';
// 旧版本PHP如果开启了magic_quotes_gpc,需要先去除转义
if (get_magic_quotes_gpc()) {
    $developer = stripslashes($developer);
}

3. 确认数据库查询的参数绑定逻辑

你的代码已经用了命名参数:name,这是正确的做法(能防注入还能处理特殊字符),但要确保GetID方法里绑定参数的逻辑没问题,比如PDO的正确写法应该是这样:

public function GetID($query, $name) {
    $stmt = $this->db->prepare($query);
    // 明确指定参数类型为字符串,确保特殊字符被正确处理
    $stmt->bindParam(':name', $name, PDO::PARAM_STR);
    $stmt->execute();
    return $stmt->fetchColumn(); // 假设返回单个ID值
}

4. 验证数据库存储的原始数据

最后确认数据库里pams_developer表的developer_name字段,是否真的存储了完整的Tan & Tan Developments——可以直接在数据库客户端执行查询验证:

SELECT id, developer_name FROM pams_developer WHERE developer_name LIKE '%Tan%';

如果数据库里的内容本身就是截断的,那得检查数据插入时的逻辑,确保插入过程中没有丢失字符。


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

火山引擎 最新活动