Имеем базу данных MySQL с кодировкой utf8_general_ci
Так же, имеем PHP файл который берёт данные из базы (кодировка UTF-8)
<?php
header('Content-type: text/xml; charset=UTF-8');
$connection = mysql_connect( 'localhost', '***', '***' );
mysql_query('SET NAMES utf-8');
mysql_set_charset("UTF-8", $connection);
mysql_select_db( '***' );
$result = mysql_query('SELECT * FROM shell' );
?>
<shell>
<?php
while ($row = mysql_fetch_assoc($result)) {
?>
<message>
<id><?php echo( htmlentities( $row['id'] ) ) ?></id>
<desc><?php echo( htmlentities( $row['description'] ) ) ?></desc>
<date><?php echo( htmlentities( $row['date'] ) ) ?></date>
<time><?php echo( htmlentities( $row['time'] ) ) ?></time>
</message>
<?php
}
mysql_free_result($result);
?>
</shell>
И в итоге, получаю вывод через браузер
<shell>
<message>
<id>1</id>
<desc>???? ???????????? ??????</desc>
<date>123</date>
<time>233</time>
</message>
<message>
<id>2</id>
<desc>34234-1</desc>
<date>234234-2</date>
<time>234234-3</time>
</message>
<message>
<id>3</id>
<desc>12332</desc>
<date>32133</date>
<time>12334</time>
</message>
</shell>
Подскажите пожалуйста, как мне поставить правильную кодировку, что бы вместо знаков вопроса (???? ???????????? ??????) отображались русские буквы (Курс Классический массаж). Копаюсь уже сутки - понять не могу.
И ещё, создал файл .htaccess с содержимым
AddDefaultCharset UTF-8
В самом редакторе поставьте utf-8 или ide не знаю что у вас, потом чистом виде библиотека mysql не поддерживается. Потом в кодировке дефис не прописывается + text/html лучше У вас как вариант можно использовать mysqli или pdo . Я использую pdo библиотеку сделайте такой код всё заработает DB
<?php
define('DB_HOST', 'localhost');
define('DB_NAME', 'test');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_CHAR', 'utf8');
class DB
{
protected static $instance = null;
public function __construct() {}
public function __clone() {}
public static function instance()
{
if (self::$instance === null)
{
$opt = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => TRUE,
);
$dsn = 'mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset='.DB_CHAR;
self::$instance = new PDO($dsn, DB_USER, DB_PASS, $opt);
}
return self::$instance;
}
public static function __callStatic($method, $args)
{
return call_user_func_array(array(self::instance(), $method), $args);
}
public static function run($sql, $args = [])
{
$stmt = self::instance()->prepare($sql);
$stmt->execute($args);
return $stmt;
}
}
?>
Далее вытаскиваем данные
$result = DB::run("SELECT * FROM shell");
foreach ($result as $row){
echo"
<shell>
<message>
<id>".$row['id']."</id>
<desc>".$row['description']."></desc>
<date>".$row['date']."></date>
<time>".$row['time']."></time>
</message>
</shell>";
}
если будут ошибки пишите я проверил в версии 7.0
Настоятельно не рекомендую использовать mysql
.
Внимание
Данная функция объявлена устаревшей в PHP 5.3.0, и, вместе с расширением MySQL, удалена PHP 7.0.0. Вместо нее используйте активно развивающиеся расширения MySQLi или PDO_MySQL.
Рекомендую использовать mysqli
.
function con() {
static $mysqli;
if (!$mysqli) {
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('хост', 'пользователь', 'пароль', 'имя базы данных');
$mysqli->set_charset('utf8');
}
return $mysqli;
}
$con = con();
$shell = $con->query("SELECT * FROM shell");
// ..........
Не нужно делать SET NAMES utf8
данная операция не работает с кодировкой соединения, нужно использовать метод set_charset
.
Вообще нужно сделать базу, таблицы в utf8
, и поля базы в utf8_general_ci
, а также файлы с кодами, нужно конвертнуть в UTF-8 (без BOM)
и в .htaccess
прописать AddDefaultCharset utf-8
, ну и в index.php
(единую точку входа, где подключаются файлики, также задать заголовки).
header('Content-type:text/html;charset=utf-8');
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как отобразить в sendmessage координаты курсора(рабочей области окна) и на каком пункте меню находится курсор в данный момент?
Необходимо сделать базовую реализацию boost::anyГлавное условие: чтобы можно было свободно хранить в контейнерах разные типы