搜索输入 GET/POST 数据无法理解来自 MySQL DB 的 utf8_unicode_ci 泰语数据

Posted

技术标签:

【中文标题】搜索输入 GET/POST 数据无法理解来自 MySQL DB 的 utf8_unicode_ci 泰语数据【英文标题】:Search input GET/POST data not able to comprehend with utf8_unicode_ci Thai language data from MySQL DB 【发布时间】:2017-10-01 17:09:35 【问题描述】:

我在 m mysql 数据库中有一个泰语内容,带有排序规则 utf8_unicode_ci

我已使用以下内容在我的网页上正确显示

<head>
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8" />
<style type="text/css">
.thai 
font-family:Tahoma, Arial Unicode MS;
font-size: 2em;
</style>
</head>
<body>
<div id="content"><span class="thai"><?php echo $row['description2'];?></span></div>

我的数据库连接文件有以下代码

mysqli_query($connection, "SET NAMES UTF8");

现在的问题是它显示正确,但是如果有人尝试用泰语搜索,我的搜索框无法搜索它,但使用数据库中存在的英文内容正确搜索

以下是我的搜索代码

<form method="GET" action="index.php" accept-charset="UTF-8">
<input class="thai" type="text" charset="UTF-8" class="keyword" value="Search" name="search" id="q" onFocus="if(this.value==this.defaultValue) this.value='';" onBlur="if(this.value=='') this.value=this.defaultValue;" /><br />

</form>

<?php
require_once('inc/connect.php');

//NOT SURE IF THE FOLLOWING DECODING IS MAKING ANY SENSE, I still Get the -No result found- for thai language, but it made the boolean error go away

$search1=$_GET['search'];
$search=utf8_decode($search1);

$select1="SELECT * FROM products where id like '%$search%' || title like '%$search%' || size like '%$search%' ||description1 like '%$search%'|| description2 like '%$search%' order by id asc";



 $result=mysqli_query($connection, $select1);
    $num=mysqli_num_rows($result);
 if($num > 0)
 
  while($row=mysqli_fetch_array($result))

  
    $oid=$row['id'];

 echo $row['title'];




  
  
else
  $ertx="No Records Found In Database";
 echo $ertx;
 
?>

【问题讨论】:

【参考方案1】:

函数 utf8_decode 不支持泰语字符的转换,因为它转换成的 PHP 格式是 ISO-8859-1,一个类似于 ASCII 的字符集(因此不支持泰语字符)。

这意味着泰语字符将被替换为“?”因此不会找到任何结果,除非您有带问号的条目。

参考:http://php.net/manual/en/function.utf8-decode.php

布尔错误发生在哪里?这将帮助社区找到解决您问题的方法。

使用:

error_reporting(E_ALL);
ini_set('display_errors', 1);

将启用 PHP 运行时错误

编辑: 尝试此代码以获取任何 mysqli 错误:

if (mysqli_connect_errno())

    echo "Failed to connect to MySQL: " . mysqli_connect_error();
    //you need to exit the script, if there is an error
    exit();

来自https://***.com/a/22582272/5287820

【讨论】:

而不是这个 $search1=$_GET['search']; $search=utf8_decode($search1);如果我只使用 $search=$_GET['search'];它抛出布尔错误 你知道在代码中哪里抛出了布尔错误吗? 您可以通过使用 error_reporting(E_ALL); 启用错误来找到它; ini_set('display_errors', 1); 当我没有使用解码功能时,如果我用任何泰文字符而不是英文搜索警告:mysqli_num_rows() 期望参数 1 是 mysqli_result,布尔值在 /home/../第 365 行的 index.php 第 365 行是 $num=mysqli_num_rows($result); if($num > 0) 尝试在上面的脚本中添加:它告诉你mysqli错误,布尔值告诉你这个错误。

以上是关于搜索输入 GET/POST 数据无法理解来自 MySQL DB 的 utf8_unicode_ci 泰语数据的主要内容,如果未能解决你的问题,请参考以下文章

对get post等http请求方式的理解

理解jQuery中$.get$.post$.getJSON和$.ajax的用法

GET / POST方法无法使用json从mysql数据库获取数据到html

PHP 清理用户输入数据(GET,POST,COOKIE)

【HTTP】GET传参最大长度的理解误区

在弹性搜索中使用 GET/POST 时结果不同