Символ € не отображается с запросом mysql - PullRequest
0 голосов
/ 05 мая 2020

Я работаю над плагином Wordpress и по странной причине я правильно сохраняю строки в базе данных с символом , но для его отображения, даже если я не использую способ wordpress с $wpdb, но вот так (Обратите внимание: этот фрагмент кода предназначен только для проверки, было ли это более глубоким вопросом, его нельзя использовать) :

    $query = "SELECT option_value FROM wp_options WHERE option_name = '" . $this->current_options_name . "' LIMIT 1";
    $conn = new \mysqli("host", "username", "password", "dbname");
    $output = $conn->query($query);

    if ($output->num_rows > 0) {
        // output data of each row
        while($row = $output->fetch_assoc()) {
            var_dump($row);
        }
    } else {
        echo "0 results";
    }

Вместо этого отображается ? of в строковых значениях.

Важные примечания

  1. У меня нет этой проблемы с char $.
  2. Символ правильно хранится в базе данных, я вижу его в значении таблицы внутри PHPMyAdmin.

У кого-то есть идея?

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

используйте это, когда вы добавляете символы, установленные в conectio0n. Он делает то же самое, что и ваш тест. Но безопасный набор символов - utf8mb4, потому что это мой параметр по умолчанию. Может быть, вы должны изменить это в соответствии с вашими потребностями

$mysqli= new mysqli("host", "username", "password", "dbname");
$mysqli->set_charset("utf8mb4");
$query = "SELECT option_value FROM wp_options WHERE option_name = ? LIMIT 1";
$stmt = $mysqli->prepare($query );
$stmt->bind_param("si", $this->current_options_name);
 $stmt->execute();
 $result = $stmt->get_result();
 if($result->num_rows === 0) {
   echo '0 results'; 
  } else {
    while($row = $result->fetch_assoc()) {
     var_dump($row);
    }
  }

$stmt->close();
0 голосов
/ 05 мая 2020

Это проблема с кодировкой символов. Символы представлены числами, и существует множество кодировок символов, указывающих, какое число и какой символ.

В вашем коде задействованы три, возможно, разные кодировки. Кодировка базы данных, кодировка PHP и кодировка веб-страницы. Все они должны договориться о том, какую кодировку они используют. Или они должны знать, какую кодировку используют другие, и правильно конвертировать.

? обозначает число, которому нет соответствующего символа в наборе символов, который использует ваша веб-страница. $ одинаков во многих наборах символов, поэтому он менее чувствителен к кодированию глупостей. € часто отличается, поэтому он чувствителен к ошибкам кодирования.

Любая точка, передающая текст из одной системы в другую, может искажать текст. Передача текста с веб-страницы в PHP, вставка текста из PHP в базу данных, выборка текста из базы данных в PHP и текста из PHP на веб-страницу.

Самое простое необходимо убедиться, что все они используют UTF-8, наиболее распространенную кодировку, которая обрабатывает практически каждый символ.

Этот PHP Круглый стол по Кодировке символов и UTF-8 в PHP поможет вам решить проблему. Также ответы на Установка PHP кодировки по умолчанию для utf-8 .

Вы можете проверить набор символов своей базы данных, выполнив эти ответы .

Наконец, проверьте кодировку символов вашей веб-страницы. В большинстве браузеров это будет «Информация о странице». Например, Stack Overflow имеет кодировку текста UTF-8.


Примечание. Не используйте конкатенацию строк для ввода значений в запросы SQL. Использовать параметры привязки . Он менее глючный и более безопасный.

...