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

求解惑

该回答引用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.

我的个神,终于知道为嘛了,JS传值过来默认是UTF8,而我的数据库编码是gb2312,所以MYSQL不认识,看大家说的都是用iconv('GB2312','UTF-8',$minb)把gb2312转成UTF8,结果原本就是UTF8,这个函数事实上一点作用都没有,折腾了一天突然灵光一现,改成iconv('UTF-8','GB2312',$minb)后,MYSQL就能正常查询中文了。