1 (изменено: Hanut, 2010-01-23 19:59:38)

Тема: Русские буквы отображаются в виде вопросительных знаков. Что делать?

Перенес DB с 000webhost.com на zymic.com.
В таблицах все крокозямбами. Выставил в полях "cp1251_general_ci" - не помогло
Поменял  "Сравнения":

ALTER TABLE `fastbuy` CONVERT TO CHARACTER SET cp1251 COLLATE cp1251_general_ci
ALTER DATABASE `db_name` DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci

http://i079.radikal.ru/1001/7e/c3cb710d1f3et.jpg
И все-равно, в PHPMyAdmin и в панели администрирования сайта все русские буквы выводятся так: "????? ?????"
http://s39.radikal.ru/i084/1001/9f/a7f72ae1aaa5t.jpg
Скрипт добавляющий данные:


<?php
//session_start();
error_reporting(0);
//$_SESSION['counter']=0;
//echo $_SESSION['counter'];
//$_SESSION['counter']++;

//ini_set('display_errors',1);
//ini_set('session.use_cookies',0);
//ini_set('session.use_trans_sid',1);
$sql="SET NAMES cp1251";
$c=mysql_connect("mysql.hosting.zymic.com","93725_dba","") or die ("Problem 

mysql_connect");
mysql_select_db("amina_zxq_db1") or die("Problem mysql_select_db");
mysql_query($sql,$c) or die ("Problem mysql_query.");
        mysql_close($c); // Не надо здесь закрывать подключение к MySQL.

 if ($_REQUEST['name']){
                    $name=($_POST['name']);
                    $email=($_POST['email']);
                    $phone=($_POST['phone']);
                    $address=($_POST['address']);
                    $article=($_POST['article']);

$sql="INSERT INTO fastbuy ( 

varcharEmail,varcharPhone,varcharAddress,varcharArticle,intActual,timestampUpdateDate,intID

UpdateUser,varcharName) VALUES ('".$email."','".$phone."','".$address."','".

$article."','NULL','NULL','NULL','".$name."')";
$c=mysql_connect("mysql.hosting.zymic.com","93725_dba","") or die ("Problem 

mysql_connect"); // Здесь вы снова подключились к MySQL, но кодировку соединения не установили SET NAMES 1251.
mysql_select_db("amina_zxq_db1") or die("Problem mysql_select_db");
mysql_query($sql,$c) or die ("Problem mysql_query");

/* $_SESSION['email']="vlad275@lublino39.net84.net";
$body = "Name:".$name."\r\nEmail:".$email."\r\nPhone:".$phone."\r\nAddress:".$address."\r

\nArticle:".$article."\r\n";
//                    $body = base64_encode($body);
$theme = '=?windows-1251?B?'.base64_encode('Buying').'?=';
$headers = "From: ".$_SERVER['SERVER_NAME']." <".$_SESSION['email'].">\r\n";
$headers = $headers."Return-path: <".$_SESSION['email'].">\r\n";
$headers = $headers."Content-type: text/plain; charset=\"windows-1251\"\r\n";
$headers = $headers."Content-Transfer-Encoding: quoted-printable\r\n\r\n";
mail('vlad275@lublino39.net84.net', $theme, $body, $headers);
mail($email, $theme, $body, $headers);
*/

echo "<B style=COLOR:#000000;BACKGROUND:#00FF00;>Спасибо за покупку!</B>";
}
?>

    <TITLE>White</TITLE>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<META HTTP-EQUIV="Expires" CONTENT="Wed, 2 Mar 1996 00:00:05 GMT">

<META HTTP-EQUIV="Last-Modified" CONTENT="Wed, 2 Mar 1996 00:00:05 GMT">

<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">

<META HTTP-EQUIV="Cache-Control" CONTENT="post-check=0,pre-check=0">

<META HTTP-EQUIV="Cache-Control" CONTENT="max-age=0">

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    <TABLE>
        <TR>
            <TD>



<img src="http://amina.zxq.net/images/00.jpg">
<br />
Комплект женского белья. Безразмерный. Подходит для женщин с размерами от S до L. Материал: 

nylon, spandex. Цвет: черный.
Цена со скидкой - 55 USD.


                
            </TD>
            <TD><table>
                    <thead align=center><P>Только $55! <B>Быстрый 

заказ:</B></P></thead>
                    <form method=post>
                    <tr><td>Ваше имя:</td><td><input type=text 

name='name'></td></tr>
                    <tr><td>Ваш email:</td><td><input type=text 

name='email'></td></tr>
                    <tr><td>Ваш телефон:</td><td><input type=text 

name='phone'></td></tr>
                    <tr><td>Куда доставить:</td><td><textarea 

name='address'></textarea></td></tr>
                    <input type=hidden name=article value="White">
                    <tr><td></td><td><input type=submit 

value="Заказать"></td></tr>
                </form>
                </table>
                

            </TD>
        </TR>
    </TABLE>
</HTML>

Странно, но timestamp тоже не работает!

2

Re: Русские буквы отображаются в виде вопросительных знаков. Что делать?

vlad275
Посмотрите как данные выглядят в phpMyAdmin. Если там крякозябы, то посмотрите как данные выглядят в импортированном файле дампа. Покажите вид крякозябов.

Кажется я не понял. Данных у вас нет, просто этот скрипт не пишет кириллицу. Подключаться к MySQL функцией mysql_connect надо только один раз.

3

Re: Русские буквы отображаются в виде вопросительных знаков. Что делать?

В phpMyAdmin выглядят как "?????? ??????". В дампе тоже самое:

-- phpMyAdmin SQL Dump
-- version 3.1.3.1
-- http://www.phpmyadmin.net
--
-- Хост: mysql.hosting.zymic.com
-- Время создания: Янв 23 2010 г., 16:51
-- Версия сервера: 5.0.75
-- Версия PHP: 5.3.0

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- База данных: `amina_zxq_db1`
--

-- --------------------------------------------------------

--
-- Структура таблицы `fastbuy`
--

CREATE TABLE `fastbuy` (
  `intID` int(8) NOT NULL auto_increment,
  `varcharEmail` varchar(255) default NULL,
  `varcharPhone` varchar(255) default NULL,
  `varcharAddress` varchar(255) default NULL,
  `varcharArticle` varchar(255) default NULL,
  `intActual` int(1) default NULL,
  `timestampUpdateDate` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `intIDUpdateUser` int(8) default NULL,
  `varcharName` varchar(255) NOT NULL,
  PRIMARY KEY  (`intID`),
  UNIQUE KEY `intID` (`intID`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=5 ;

--
-- Дамп данных таблицы `fastbuy`
--

INSERT INTO `fastbuy` (`intID`, `varcharEmail`, `varcharPhone`, `varcharAddress`, `varcharArticle`, `intActual`, `timestampUpdateDate`, `intIDUpdateUser`, `varcharName`) VALUES
(1, 'vas@com.com', '1234567', '?? ??????????', 'White', 0, '0000-00-00 00:00:00', 0, '????'),
(2, 'vas@com.com', '1234567', '?? ??????????', 'White', 0, '0000-00-00 00:00:00', 0, '????'),
(3, 'vas@com.com', '1234567', '?? ??????????', 'White', 0, '0000-00-00 00:00:00', 0, '????'),
(4, 'vas@com.com', '1234567', '?? ??????????2', 'White', 0, '0000-00-00 00:00:00', 0, '????');

4

Re: Русские буквы отображаются в виде вопросительных знаков. Что делать?

vlad275
Прокомментировал в коде две строки.

5

Re: Русские буквы отображаются в виде вопросительных знаков. Что делать?

Hanut сказал:

vlad275
Прокомментировал в коде две строки.

Спасибо! Я не знал, что после выставления NAMES нужно НЕ закрывать соединения. Хотя это логично!

6

Re: Русские буквы отображаются в виде вопросительных знаков. Что делать?

А как добиться работы timestamp ? На платном хостинге работает, а делаю, вроде, тоже самое на бесплатном - не работает :-(

7

Re: Русские буквы отображаются в виде вопросительных знаков. Что делать?

vlad275
Не забирайте NULL значения в кавычки, иначе получаются строки и выходит ошибка.

8

Re: Русские буквы отображаются в виде вопросительных знаков. Что делать?

Огромное спасибо!

9

Re: Русские буквы отображаются в виде вопросительных знаков. Что делать?

Столкнулся с тоже проблемой... предварительно прочитал статью которую вы предложили.... но описаный там метод мне не помог....после вставки "SET NAMES" вместо "????"  получил "???????"....
Предполагаю что возможно я неправильно выставлял "Сравнение" и "Сопоставление соединения с MySQL" ?
Какие значения следует подбирать ?Оо

10

Re: Русские буквы отображаются в виде вопросительных знаков. Что делать?

Тарас
Если страницы сайта в кодировке windows-1251, то должны быть следующие настройки БД:
1) Сравнения базы данных и таблиц - cp1251_general_ci.
2) Кодировка соединения с MySQL - cp1251 (задается через SET NAMES cp1251).

Если речь идет о данных, которые уже находятся в БД, то следует проверить, чтобы их кодировка соответствовала страницам сайта и кириллица в phpMyAdmin выглядела читаемой, а не в виде крякозябов или вопросиков.

Менять сравнение на существующих данных нельзя ни в коем случае - это убивает данные. Можно только перекодировать, но это задача отдельная.

11

Re: Русские буквы отображаются в виде вопросительных знаков. Что делать?

Hanut сказал:

Если страницы сайта в кодировке windows-1251, то должны быть следующие настройки БД

Эм... имеется ввиду в какой кодировке браузер отображает ?

Hanut сказал:

1) Сравнения базы данных и таблиц - cp1251_general_ci

Указал "Сравнение" - ср1251_general_ci

Hanut сказал:

2) Кодировка соединения с MySQL - cp1251

Указал "Сопоставление соединения с MySQL" -ср1251_bin

При заполнении таблицы кириллицей возникла ошибка "#1366 - Incorrect string value: '\xC0\xEB\xE5\xEA\xF1\xE5...' for column 'name' at row 1 "

Hanut сказал:

Если речь идет о данных, которые уже находятся в БД, то следует проверить, чтобы их кодировка соответствовала страницам сайта и кириллица в phpMyAdmin выглядела читаемой, а не в виде крякозябов или вопросиков.

До создания новой БД и возникновения описаной выше ошибки ... все данные в phpMyAdmin отображались корректно... но в браузере отображались "????" как я описывал в своем предыдущем посте....

12

Re: Русские буквы отображаются в виде вопросительных знаков. Что делать?

Проблему решил... но возник другой вопрос... я задаю кодировку cp1251 всё заполняется и отображается( при изменении  в браузере кодировки на cp1251)... Но можно ли как-то оптимизировать... что бы не менять в браузере каждый раз кодировку  и  заносить в 1 таблицу несколько вариантов(кириллицу , латынь и т.д.) ?

13

Re: Русские буквы отображаются в виде вопросительных знаков. Что делать?

Тарас
Латинский алфавит и кириллица есть в кодировке cp1251. Если надо иметь на одной странице немецкий язык и русский, то это можно сделать исключительно в utf8.

14

Re: Русские буквы отображаются в виде вопросительных знаков. Что делать?

Но приходится каждый раз браузеру указывать, что отображать "Вид кодировки сз1251" иначе "????", вместо криллицы .... как то можно задать что бы он сам определял в какой нужно отображать ?
используя "SET NAMES cp1251" , всё равно приходится каждый раз указывать отображение кодировки ....О_о

15

Re: Русские буквы отображаются в виде вопросительных знаков. Что делать?

Тарас
Кодировка страницы должна быть ANSI (не UTF8), посмотрите в текстовом редакторе. Используйте метатег определяющий кодировку:
<meta content="text/html; charset=windows-1251" http-equiv="Content-Type">

16

Re: Русские буквы отображаются в виде вопросительных знаков. Что делать?

O! большое спасибо !!!