Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Головоломка с Кодировкой в PHP + MySQL
 
 автор: alexcpp   (09.07.2006 в 22:41)   письмо автору
 
 

На моём сайте проблемма странная есть с кодировкой. Поле MySQL кодированно в latin1_general_ci. Пользуюсь системой OsCommerce. Когда вводятся (в базу) слова с всеми заглавны буквами то что-то странное творится с кодировкой.

Вот пример:

setlocale(LC_ALL, 'ru_RU');
while($row = mysql_fetch_array($result))
{
echo $row['products_name']."<br>";
echo strtolower($row['products_name'])."<br>";
echo ucwords($row['products_name'])."<br>";
}

Выходит вот что (только пару примеров):

Взорвите банк
взорвите банк
Взорвите Банк
АТЛЕТИЧЕСКАЯ ГИМНАСТИКА 1
аТлеТиЧеСкаЯ гимнаСТика 1
АТЛЕТИЧЕСКАЯ ГИМНАСТИКА 1

В первом примере всё было нормально а во втором творится неизвесно что. Буду благодарен за любую помощ.

   
 
 автор: cheops   (10.07.2006 в 10:47)   письмо автору
 
   для: alexcpp   (09.07.2006 в 22:41)
 

Выберите сортировку latin1_general_cs, а еще лучше cp1251_general_cs

   
 
 автор: alexcpp   (11.07.2006 в 03:38)   письмо автору
 
   для: cheops   (10.07.2006 в 10:47)
 

Пробовал обе и многие дригие кодировки. В большинскве случаев (включая cp1251_general_cs) русские символы превращяются в вопросительные знаки. Latin1_genera_cs ничего абсолютно не исправил.

Пробовал конвертировать кодировку с PHP (чтобы не терять русские символы) но ничего не получилось.

   
 
 автор: Trianon   (11.07.2006 в 10:01)   письмо автору
 
   для: alexcpp   (09.07.2006 в 22:41)
 

1
> Поле MySQL кодированно в latin1_general_ci. ....Взорвите банк
Этого быть не может. В наборе latin1 просто физически нет символов кириллицы вообще, и русских букв вчастности.

2. Настройки MySql тут не при чем.
Вам нужно менять локаль:
> setlocale(LC_ALL, 'ru_RU');
Вероятно, у хостера она называется как-то по другому.

   
 
 автор: alexcpp   (11.07.2006 в 10:52)   письмо автору
 
   для: Trianon   (11.07.2006 в 10:01)
 

1. Как видите для меня является реалностью факт что latin1_general_ci имеет русские символы. Могу дать скриншот из phpMyAdmin если не верите. Вообще возможно что там они другое значят но на сайте показываются без проблем в cp1251.

2. В вышеуказаном скрипте я это и делаю: setlocale(LC_ALL, 'ru_RU'); И нет, у хостера есть 'ru_RU', я даже проверял.

   
 
 автор: Trianon   (11.07.2006 в 11:02)   письмо автору
 
   для: alexcpp   (11.07.2006 в 10:52)
 

1. Если у Вас базе назначена кодовая страница latin1, то из этого вовсе не следует, что данные в ней хранятся в latin1. Они всё же лежат в (или преобразуются сервером к) cp1251, если в таковой отображаются и Вашим скриптом, и phpMyAdmin.

2. настройки MySql не могут влиять на работу функции strtolower.
Попробуйте выполнить следующий скрипт:

?<
setlocale(LC_ALL, 'ru_RU');
$row = "АТЛЕТИЧЕСКАЯ ГИМНАСТИКА 1";
echo $row."<br>";
echo strtolower($row)."<br>";
echo ucwords($row)."<br>";
?>

   
 
 автор: alexcpp   (12.07.2006 в 20:21)   письмо автору
 
   для: Trianon   (11.07.2006 в 11:02)
 

Вы правы, вот что получилось:


АТЛЕТИЧЕСКАЯ ГИМНАСТИКА 1
аТлеТиЧеСкаЯ гимнаСТика 1
АТЛЕТИЧЕСКАЯ ГИМНАСТИКА 1


а в другом случае:


$row = "Взорвите банк"; 
echo $row."<br>"; 
echo strtolower($row)."<br>"; 
echo ucwords($row)."<br>";



Взорвите банк
взорвите банк
Взорвите Банк


Вопрос: Как мре это исправить (я хочу чтоб ucwords правильно работал)? А так же, мой поиск в MySQL имеет похожие проблеммы. Если товар назван со всеми заглавными буквами то находится только поисковым словом с большинство заглавными буквами (которые можно видеть здесь "аТлеТиЧеСкаЯ гимнаСТика 1"). Очень странно! Если я ввожу "аТлеТиЧеСкаЯ гимнаСТика 1" или "АтлетиЧеСкаЯ гимнаСТика 1" у в посик то товар находится а если "АтлетичеСкаЯ гимнаСТика 1" то уже не находится!

   
 
 автор: Trianon (из кабака)   (13.07.2006 в 10:35)
 
   для: alexcpp   (12.07.2006 в 20:21)
 

>Вопрос: Как мре это исправить (я хочу чтоб ucwords правильно
>работал)?

работа строковых функций определяется локалью. Трясите хостера на предмет того, как выставить правильную локаль.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования