Я получил странные символы извлечения данных из базы данных MySQL - PullRequest
1 голос
/ 01 сентября 2010

Ну, я получил базу данных MySQL, закодированную как utf8_unicode_ci, и она работает как чудо с текущим приложением (написано в Code Igniter)

Сейчас я занимаюсь разработкой нового приложения PHP, и когда я пытаюсь восстановить данные, некоторые символы не читаются - символы char нормально отображаются в БД с помощью phpMyAdmin, но когда я пытаюсь поместить его на веб-страницу, он стал как "ROLA №60".

Эти символы являются испанскими буквами, такими как ñ, á, Ó ... или ascii, такими как €, Ø ...

Где проблема? Я установил страницу как meta http-equ = "Content-Type" content = "text / html; charset = UTF-8" , я пробовал функцию mysql_set_charset (), и до сих пор ничего .

Есть ли у вас проблемы такого рода?

Ответы [ 5 ]

3 голосов
/ 01 сентября 2010

Я заметил эту проблему именно в моих приложениях, управляемых базой данных, и мне потребовалось много времени, чтобы ее решить!

Проблема возникает из-за того, что в вашем приложении есть как минимум три места, которым нужен их символзадает определения, и все они должны быть одного и того же набора символов (и этот набор символов должен быть в состоянии обрабатывать символы, с которыми вы работаете).

Символ знака вопроса и его варианты возникают, когда браузер не понимаеткакой символ ему передается.

Убедитесь, что ваши наборы символов совпадают в следующих местах:

  1. Раздел заголовка HTML.
  2. Сама сортировка базы данных - этоможет быть задано в phpMyAdmin при создании новой таблицы или изменении схемы существующей таблицы.
  3. Настройка набора символов с наибольшим пропуском : значение "default_charset" файла php.ini (может быть установлен через скрипт PHP или файл httpd.conf).

Судя по вашему сообщению, похоже, что ваш PHP cВ настройках может быть задано использование другого default_charset.Это означает, что ваша база данных будет хорошо хранить символы и будет отправлять символы точно в ваш скрипт, но сам скрипт PHP не будет знать, что делать с символом, и, следовательно, выводит в браузер в качестве раздражающего символа вопросительного знака.

Попробуйте изменить значение php.ini на тот же набор символов, и вы можете быть удивлены, увидев, что символы отображаются нормально!Если у вас нет доступа к php.ini, вы можете изменить значение с помощью следующей функции:

ini_set("default_charset", "UTF-8");

Надеюсь, это поможет.

2 голосов
/ 01 сентября 2010

Любая проблема требует только одного опыта: понимания того, что вы делаете, и отладки.Очень редкие навыки в наше время, благодаря таким сайтам, как stackoverflow.

Существует 3 уровня, в которых задействовано кодирование:

  • уровень базы данных
  • уровень сценария на стороне сервера.
  • уровень страницы html.

каждый должен быть проверен соответственно.

проверить уровень HTML легко.Просто нажмите «Вид» меню в вашем браузере, затем «Кодировка» и посмотрите, какой из них помечен.Если это правильно, у вас все в порядке.Если нет - неправильный HTTP-заголовок отправляется, и вы должны сделать это правильно

для серверной стороны очень мало что нужно сделать.Просто чтобы сказать mysql, какую кодировку вы хотите.это можно сделать двумя способами:

  • mysql_set_charset () - предпочтительный
  • запрос SET NAMES

обратите внимание, что кодировка UTF-8 с именем utf8в mysql.

уровень базы данных, кажется, в вашем случае.

2 голосов
/ 01 сентября 2010

, если mysql_set_charset () не работает, попробуйте выполнить

mysql_query('SET NAMES utf8');

после установления соединения.

0 голосов
/ 29 июня 2018

Попробуйте ниже, возможно, ваша проблема будет решена:

<?php
$text = "This is the Euro symbol '€'.";

echo 'Original : ', $text, PHP_EOL;
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;
echo 'IGNORE   : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL;
echo 'Plain    : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL;

?>

http://php.net/manual/en/function.iconv.php

0 голосов
/ 15 октября 2013

mysql_query('SET NAMES utf8'); работает при просмотре через Chrome, но не FF или IE

...