Специальные символы в PHP / MySQL

Vec<Animal> не является законным, но компилятор не может вам сказать, потому что несоответствие типа каким-то образом скрывает его. Если мы удалим вызовы на push, компилятор даст нам следующую ошибку:

<anon>:22:9: 22:40 error: instantiating a type parameter with an incompatible type `Animal`, which does not fulfill `Sized` [E0144]
<anon>:22     let mut v: Vec<Animal> = Vec::new();
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Причина, по которой это не является законным, заключается в том, что Vec<T> хранит много T объектов последовательно в памяти. Тем не менее, Animal является признаком, а черты не имеют размера (а Cat и Dog не имеют одинакового размера).

Чтобы решить эту проблему, нам нужно сохранить то, что имеет размер в Vec. Наиболее простым решением является обертывание значений в Box, то есть Vec<Box<Animal>>. Box<T> имеет фиксированный размер («указатель жира», если T - это признак, простой указатель в противном случае).

Вот работа main:

fn main () {
    let dog: Dog = Dog;
    let cat: Cat = Cat;
    let mut v: Vec<Box<Animal>> = Vec::new();
    v.push(Box::new(cat));
    v.push(Box::new(dog));
    for animal in v.iter() {
        println!("{}", animal.make_sound());
    }
}
19
задан Jonathan 11 March 2009 в 10:05
поделиться

8 ответов

Измененный набор символов HTML на ISO-8859-1 решил проблему! Глупый

4
ответ дан 30 November 2019 в 02:06
поделиться

Выпуск SET NAMES 'utf8' прямо после соединения:

$mysqli = new mysqli("localhost", "user", "password", "database");
$mysqli->query("SET NAMES 'utf8'");
10
ответ дан 30 November 2019 в 02:06
поделиться

Я был бы точно так же, как для обеспечения еще некоторой подробной информации о решении, предложенном vartec, который является (в зависимости от установки MySQL) наиболее правильным решением проблемы. В первую очередь, набор символов / кодирующий проблему в MySQL является несколько сложным предметом, который экстенсивно охвачен в руководстве MySQL Глава 9.1 "Поддержка Набора символов" . В Вашем случае особенно 9.1.4. "Наборы символов соединения и Сопоставления" будут самыми релевантными.

Для создания этого коротким: MySQL должен знать, какой набор символов / кодирование Вашего клиентского приложения (говорящий от базы данных persoective это - Ваш Сценарий PHP) ожидает, поскольку это транскодирует все строковые данные из внутреннего набора символов / кодирование, определенное в сервере - база данных - таблица - или уровень столбца в набор символов соединения / кодирование. Вы используете UTF-8 на стороне клиента, так должен сказать MySQL, что Вы используете UTF-8. Это сделано командой SET NAMES 'utf8' MySQL, которая должна быть отправлена как первый запрос при открытии соединения. В зависимости от Вашей установки и на клиентской библиотеке MySQL Вы используете в Сценарии PHP, это может быть сделано автоматически на каждом подключении.

при использовании PDO, это - просто вопрос установки параметра конфигурации

$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");

Используя mysqli изменение клиентского набора символов / кодирование еще более просто:

$mysqli = new mysqli("localhost", "user", "password", "db");
$mysqli->set_charset("utf8");

я надеюсь, что это поможет сделать все это более понятным.

31
ответ дан 30 November 2019 в 02:06
поделиться

Имейте MySQL, переводят его автоматически

$conn = mysql_connect('host', 'user', 'password');
mysql_set_charset('utf8',$conn);

http://es.php.net/manual/en/function.mysql-set-charset.php

РЕДАКТИРОВАНИЕ: из Вашего комментария я собираюсь, что это на самом деле кодируется в latin1 так

mysql_set_charset('latin1_spanish_ci',$conn);
9
ответ дан 30 November 2019 в 02:06
поделиться

Включите unicode, кодирующий в Вашем HTML.

1
ответ дан 30 November 2019 в 02:06
поделиться

При контакте со специальными символами я всегда забочусь о следующем:

  • База данных, таблица и полевые наборы символов все установлены на utf8_general_* или utf8_unicode_ *
  • , я удостоверяюсь, что мой редактор сохранил файлы PHP с правильным набором символов
  • , я установил default_charset в php.ini к UTF-8 , или
  • я отправляю Тип контента: текст/HTML; charset=UTF-8 заголовок
  • набор символов в Метатеге является UTF-8 (это переопределяется HTTP-заголовком Типа контента)
  • При соединении с MySQL, я выпускаю следующие запросы:
    • НАБОР НАЗЫВАЕТ COLLATION_CONNECTION НАБОРА НАБОРА СИМВОЛОВ UTF8
    • НАБОРА utf8
    • = "utf8_general_ci" / "utf8_general_ci"
1
ответ дан 30 November 2019 в 02:06
поделиться

Вы уверены, что у Вас есть данные UTF8 в Вашей базе данных для начала?

1
ответ дан 30 November 2019 в 02:06
поделиться

черт возьми .. это сводило меня с ума. я пытался сделать то же самое. Я добавил HTML-заголовок с кодировкой utf-8 .. mysqli_set_charset () спас меня несколько часов спустя, но я рад, что теперь он работает

, другая функция для кодирования специальных символов и акцентов - htmlentities ()

2
ответ дан 30 November 2019 в 02:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: