Поиск входных данных GET/POST, которые невозможно понять с помощью utf8_unicode_ci данных тайского языка из базы данных MySQL

У меня есть контент на тайском языке в базе данных 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;
 }
?>

person Kedar Patwa    schedule 01.10.2017    source источник


Ответы (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://stackoverflow.com/a/22582272/5287820

person wpgbrown    schedule 01.10.2017
comment
Вместо этого $search1=$_GET['search']; $ поиск = utf8_decode ($ поиск1); если я использую только $search=$_GET['search']; выдает логическую ошибку - person Kedar Patwa; 01.10.2017
comment
Вы знаете, где в коде возникает логическая ошибка? - person wpgbrown; 01.10.2017
comment
Вы можете найти это, включив ошибки с помощью error_reporting(E_ALL); ini_set('display_errors', 1); - person wpgbrown; 01.10.2017
comment
когда я не использую функцию декодирования, и если я ищу любые тайские символы вместо английского. $num=mysqli_num_rows($result); если ($ число › 0) { - person Kedar Patwa; 01.10.2017
comment
Попробуйте добавить в приведенный выше скрипт: Он сообщает вам об ошибках mysqli, а логическое значение сообщает вам об этой ошибке. - person wpgbrown; 01.10.2017
comment
часть ошибки была решена, но реальная проблема с языком все еще беспокоит меня, приведенный выше ответ действительно объясняет проблему точным образом, но каково ее решение, я уверен, что есть выход, потому что я вижу несколько тайских веб-сайтов работает правильно - person Kedar Patwa; 05.10.2017
comment
Убедитесь, что тайские символы в базе данных сохраняются правильно. Если вы не измените набор символов столбца на UTF8, символы не будут правильно сохранены. Попробуйте вывести результат вашего запроса. Это может дать вам некоторые подсказки о том, что происходит - person wpgbrown; 06.10.2017