qq_31338463 2023-07-16 19:02 采纳率: 100%
浏览 19
已结题

JS传值到PHP变量含中文字符时MYSQL无法查询

用JS向PHP传值查询时,变量含有中文出现奇怪问题,如下:

在接收POST传值的PHP页面直接书写中文查询MYSQL时没问题的,如:

<? //连接数据库
include("../dianying/conn.php");
//接收查询条件
$lei=$_POST["leib"];
$minb=$_POST["names"];
//执行查询
$mivv=mysql_query("select * from jmovect where m_chinese='雪光之灾' order by m_shijian desc");
$xkymy=mysql_num_rows($mivv);
echo $xkymy;//1
?>

如上,返回结果为1,能正常查询,且查询结果正确

但如果将中文改成JS传值过来的$minb变量名时,就无法查询,内容相同,且用alert();查看$minb变量时,显示为正常的 雪光之灾 中文,没有乱码,如下:

$mivv=mysql_query("select * from jmovect where m_chinese='".$minb."' order by m_shijian desc");
$xkymy=mysql_num_rows($mivv);
echo $xkymy;//

返回结果为空,MYSQL没有执行查询,如果将传值来的中文改成英文或数字,如上代码又能正常查询到。
也看到有用iconv('GB2312','UTF-8',$minb);解决的,但我测试后无效。毕竟在原JS页用alert();查看PHP返回传过来的值时,$minb=$_POST["names"];接收的中文不是乱码。

img

求解惑

  • 写回答

2条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-07-16 20:13
    关注

    该回答引用ChatGPT-3.5,仅供参考,不保证完全正确

    这个问题可能与字符编码相关。在确保你的数据库和网页都使用相同的字符编码(例如UTF-8)之后,你可以尝试以下解决方案:

    1. 在连接数据库之前设置字符集:
      在你的 conn.php 文件中,在连接数据库之前添加以下代码来设置字符集为 UTF-8:
    <?php
    // 连接数据库
    // ...
    
    // 设置字符集为 UTF-8
    mysqli_set_charset($conn, "utf8");
    ?>
    
    1. 在执行查询之前进行字符集转换:
      在你的查询代码之前,将 $minb 变量进行字符集转换,确保它是 UTF-8 编码:
    <?php
    // ...
    
    // 进行字符集转换
    $minb_utf8 = iconv('UTF-8', 'UTF-8//IGNORE', $minb);
    
    // 执行查询
    $mivv = mysql_query("select * from jmovect where m_chinese='".$minb_utf8."' order by m_shijian desc");
    
    // ...
    ?>
    

    这里使用了 iconv() 函数将 $minb 变量从 UTF-8 转换为 UTF-8,但同时忽略任何无法转换的字符。这样可以确保变量的编码一致性。

    请注意,mysql_query() 函数已被废弃,建议使用更安全的 mysqli 或 PDO 扩展来与数据库交互。

    如果上述方法仍然无法解决问题,可能还需要进一步检查数据库的字符集设置、表结构以及数据的编码,确保它们都一致并使用正确的字符编码。

    另外,为了提高安全性,建议在处理用户输入时进行适当的数据验证和过滤,以防止 SQL 注入等安全问题。


    该回答引用NewBing,仅供参考,不保证完全正确

    根据我从网络上搜索到的结果,这个问题可能是由于字符集编码不一致导致的。您可以尝试以下几种解决方案:

    • 在JS端,使用encodeURIComponent()函数对中文参数进行编码,然后在PHP端,使用urldecode()函数对参数进行解码¹。
    • 在PHP端,使用header()函数设置响应的字符集为UTF-8,例如:header("Content-Type: text/html; charset=utf-8")²。
    • 在PHP端,使用mysqli_set_charset()函数设置数据库连接的字符集为UTF-8,例如:mysqli_set_charset($connect, "utf8")³。

    希望这些方法对您有所帮助。如果您还有其他问题,欢迎继续与我交流。😊

    ¹: JS传值到PHP变量含中文字符时MYSQL无法查询 - CSDN问答
    ²: PHP+MySQL无法查询中文数据_Amo_柠檬C的博客-CSDN博客
    ³: Node.js MySQL - W3Schools


    源: 与必应的对话, 2023/7/16
    (1) JS传值到PHP变量含中文字符时MYSQL无法查询 - CSDN问答. https://ask.csdn.net/questions/7978666.
    (2) PHP+MySQL无法查询中文数据_Amo_柠檬C的博客-CSDN博客. https://blog.csdn.net/Amo_C1003/article/details/80473169.
    (3) Node.js MySQL - W3Schools. https://www.w3schools.com/nodejs/nodejs_mysql.asp.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月24日
  • 已采纳回答 7月16日
  • 创建了问题 7月16日

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上