Почему я не могу выбрать специальные символы, используя функции mysqli? - PullRequest
1 голос
/ 17 сентября 2011

Я искал ответ пару дней и пока не нашел ответа ...

Я создаю веб-сайт для клиента и использую базу данных MySQL для храненияДанные для меню, и я использую PHP mysqli подготовил операторы для работы с базой данных.Когда я использую форму для обновления или добавления строк, специальные символы вставляются неправильно, акцентированные символы «é» становятся Ã © при отправке.Хотя, если я введу их вручную через phpMyAdmin, они будут отображаться очень хорошо.

Мне немного повезло, добавив это после объекта $ mysqli, как рекомендуется здесь

$mysqli -> set_charset( "utf8" );

Это толькоПохоже, что он работает с командами обновления и вставки, все, что выбрано, теперь показывает «авторское право tilda A» вместо акцентированных e, так что это в основном та же проблема, но в обратном порядке.PHP, на который влияют:

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

if( $_GET['mode'] == "edit" && $_GET['drink'] && $_POST['e_name'] ) {
    $update = "update `menu` set `name` = ?, `description` = ?, `small` = ?, `medium` = ?, `large` = ?, `flavors` = ?, `section` = ?, `order` = ? where `id` = ?;";

    $id = $_GET['drink'];
    $nName = $_POST['e_name'];
    $nDesc = $_POST['e_desc'];
    $nSml = $_POST['e_prc1'];
    $nMed = $_POST['e_prc2'];
    $nLrg = $_POST['e_prc3'];
    if( $_POST['e_flav'] == "on" )
        $nFlv = 1;
    else
        $nFlv = 0;
    $nSect = $_POST['e_sect'];
    $nOrd = $_POST['e_ordr'];

    if( $changeIt = $mysqli -> prepare( $update ) ) {
            $changeIt -> bind_param( 'ssdddiiii', $nName, $nDesc, $nSml, $nMed, $nLrg, $nFlv, $nSect, $nOrd, $id );
        $changeIt -> execute();
    }

    header( "Location: http://stackoverflow.com/" );
    exit;
}

$mysqli -> close();

Ответы [ 2 ]

0 голосов
/ 21 сентября 2011
0 голосов
/ 17 сентября 2011

Вы должны использовать

query("SET NAMES utf8");  

SET NAMES указывает, какой набор символов будет использоваться клиентом для отправки операторов SQL на сервер.Таким образом, SET NAMES 'utf8' сообщает серверу: «будущие входящие сообщения от этого клиента находятся в наборе символов utf8». Он также определяет набор символов, который сервер должен использовать для отправки результатов обратно клиенту.(Например, он указывает, какой набор символов использовать для значений столбцов, если вы используете инструкцию SELECT.)

Также убедитесь, что

Вы задали правильную кодировку хранилища для своей таблицы / db

CREATE TABLE{
...
}CHARSET=utf8;

или

CREATE DATABASE  DEFAULT CHARACTER SET utf8

Ваш вывод html имеет кодировку utf-8.

Content-Type: text/html;charset=utf-8

Теперь ваша база данных / таблица будет хранить значения в utf-8.данные будут отправлены и получены в utf-8, и страница отобразит их в utf-8.Это должно решить вашу проблему.

...