Так что после целого дня поиска и отладки я попал сюда.
установите следующую кодировку:
db: utf8_general_ci
table: utf8_general_ci
column: utf8_general_ci, TEXT
Я вставил некоторые символы евро и некоторые другие странные символы
acentuação
конфиг
$config['charset'] = 'UTF-8';
DSN
char_set=utf8,dbcollat=utf8_general_ci
Я сделал несколько запросов для сравнения
$query = $this->db->query("SET NAMES latin1");
$query = $this->db->query("SELECT shortdesc,HEX(shortdesc) FROM `contracttypes` WHERE id = 4");
$ret['latin1'] = $query->row();
$query = $this->db->query("SET NAMES utf8");
$query = $this->db->query("SELECT shortdesc,HEX(shortdesc) FROM `contracttypes` WHERE id = 4");
$ret['utf8'] = $query->row();
return $ret;;
public function utfhell() {
var_dump($this->campagne_model->utfhell());
}
Это выводы
array (size=2)
'latin1' =>
object(stdClass)[34]
public 'shortdesc' => string 'acentua��o �����' (length=16)
public 'HEX(shortdesc)' => string '6163656E747561C3A7C3A36F20E282ACE282ACE282ACE282ACE282AC' (length=56)
'utf8' =>
object(stdClass)[33]
public 'shortdesc' => string 'acentuação €€€€€' (length=28)
public 'HEX(shortdesc)' => string '6163656E747561C3A7C3A36F20E282ACE282ACE282ACE282ACE282AC' (length=56)
Пока все хорошо, на
<?php header('Content-Type: text/html; charset="utf-8"', true); ?>
<!doctype html>
<html>
<head>
<title>UTFhell</title>
<link rel="stylesheet" href="../assets/css/style.css"/>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
...
<?php
echo 'Original : ', $campagne_info->contractName->shortdesc."<br />";
echo 'UTF8 Encode : ', utf8_encode($campagne_info->contractName->shortdesc)."<br />";
echo 'UTF8 Decode : ', utf8_decode($campagne_info->contractName->shortdesc)."<br />";
echo 'TRANSLIT : ', iconv("ISO-8859-1", "UTF-8//TRANSLIT", $campagne_info->contractName->shortdesc)."<br />";
echo 'IGNORE TRANSLIT : ', iconv("ISO-8859-1", "UTF-8//IGNORE//TRANSLIT", $campagne_info->contractName->shortdesc)."<br />";
echo 'IGNORE : ', iconv("ISO-8859-1", "UTF-8//IGNORE", $campagne_info->contractName->shortdesc)."<br />";
echo 'Plain: ', iconv("ISO-8859-1", "UTF-8", $campagne_info->contractName->shortdesc)."<br />";
echo '€€€€€€€€€€<br>';
?>
Ни один из них не показывает мне нормальный символ евро, кроме последнего эхо-заявления, все они дают мне алмазы с вопросительным знаком для евросимволов
HEX является кодировкой utf8 для этой строки. Таким образом, данные в таблице «правильно».
Черный бриллиант ( ) это браузерный способ сказать wtf. Это происходит от наличия символов латинского алфавита, но говорит браузеру
для отображения utf8 символов.
Вы мог попросите браузер отобразить «Western», чтобы избежать основных проблем.
Помните, цель состоит в том, чтобы действительно использовать utf8.
Иногда это происходит вместе с вопросительными знаками, и в этом случае вы должны начать все сначала.
Причина (вероятно):
Решение, План А: (Небрежно, но, вероятно, работоспособно)
Измените # 5, скажем, соответствующий эквивалент latin1.
Решение, план Б:
query("SET NAMES utf8")
(если нет способа установить его во время подключения)CHARACTER SET utf8
<meta ... UTF-*>
,Других решений пока нет …