Проблема с кодировкой PHP при вставке данных в MySQL - PullRequest
1 голос
/ 28 января 2012

У меня есть файл PHP, который вставляет $ mail и $ password в мою базу данных.Смотрите код ниже.Мой php-файл, мой BD и мои поля таблицы находятся в utf-8.Так что я не понимаю, почему письмо, которое я посылаю "Philémon", идет как "Philémon" в моей таблицеКстати, я знаю, что это не формат почты.Это просто ради тестирования.

Мой PHP:

<?php
header('Content-Type: text/html; charset=utf-8');
require("php/connect.inc.php");

$mail = mysql_real_escape_string("Philémon");
$password = sha1("pass123");

mysql_query("INSERT INTO ENS_MEMBRES (ENS_MAIL, ENS_PASS) VALUES ('$mail','$password')");
?>

Ответы [ 2 ]

5 голосов
/ 28 января 2012

Ваш исходный код PHP, вероятно, в кодировке UTF-8;Ваше соединение с базой данных, вероятно, закодировано ISO-8859-1, это кодировка соединения по умолчанию для MySQL.Это приведет к тому, что UTF-8 é будет интерпретироваться как два отдельных байта и сохранен таким образом в таблице mySQL.

Решение: перед отправкой данных выполните

 mysql_set_charset('utf8'); 

;если эта функция недоступна, используйте

mysql_query("SET NAMES utf8;");
0 голосов
/ 06 сентября 2018

Для пользователей, в настоящее время испытывающих эту проблему, mysql_query устарело в PHP 5.5.0 и удалено в PHP 7.0.0 вместо mysqli_query (процедурный) или PDO ( см. Документацию php * 1003) *). Чтобы устранить эту проблему для пользователей, внедряющих процедурное расширение, попробуйте это

$conn = mysqli_connect('host', 'user', 'password', 'dbname');
mysqli_set_charset($conn,"utf8");

Это отлично сработало для меня!

Для пользователей, реализующих расширение PDO, попробуйте следующее

$pdo = new PDO(
    ''mysql:host=host;dbname=urdbname'',
    "username",
    "password",
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 

Надеюсь, это поможет кому-то там;)

...