|
|
|
| С наступающим вас новым годом ув. форумчане!
Снова вынужден просить вашей помощи в нашем нелегком деле. Надеюсь моя проблемма не останется без внимания и будет интересна и вам тоже.
Суть в следующем. Разрабатывается сайт. Будет один главный домен и много локальных субдоменов для разных стран. Соотв. локальные домены будут на разных языках, которые так прямо и кишат всякими там символами которые мне даже произносить страшно. Делать нечего, решил работать с юникодом. Да вот проблемма на сервере не установлен модуль mbstring. Хотя и с ним ситуация особо не спасается... Допустим выбираю из базы (таблицы в юникоде) какую то строку и echo mb_strtoupper() выводит какую то чушь. Символы мало того что не преобразовываются к верхнему регистру, часть их ещё и искажается.
Может кто нибудь знает какие нибудь статьи про то как работать с юникодом в пхп (5-я версия). ли поделится своим опытом. Буду очень признателен. | |
|
|
|
|
|
|
|
для: Евгений Петров
(30.12.2006 в 22:08)
| | У вас какая кодировка (и сортировка) таблиц в СУБД MySQL? | |
|
|
|
|
|
|
|
для: cheops
(30.12.2006 в 22:19)
| | В MySQL utf8 но не в ней проблемма, т.е. что то типа:
echo mysql_result(mysql_query("SELECT `f1` FROM tbl"),0,0); выводить все правильно. А вот если преобразовать к верхнему регистру то искажается | |
|
|
|
|
|
|
|
для: Евгений Петров
(30.12.2006 в 22:41)
| | О! А если указать кодировку во втором параметре mb_strtoupper то преобразовывает нормально. Но ситуация не решается. mbstring не установлен. Спрошу у заказчика, возможно удасться уговорить хостеров включить, но не уверен что они согласятся. Может есть какие нибудь другие функции работающие с юникодом? Или какие то реализованные функции... | |
|
|
|
|
|
|
|
для: Евгений Петров
(30.12.2006 в 22:46)
| | Вообще лучше перевести на время в windows-1251 с помощью iconv(), например. Либо можете менять регистр букв в UTF-8 с помощью strtr():
<?php
$string = "ааа";
$array = array('А' => 'а', 'Б' => 'б', 'В' => 'в'); //И т.д.
$string = strtr($string, $array);
?>
|
| |
|
|
|
|
|
|
|
для: Unkind
(30.12.2006 в 22:56)
| | Было бы конечно лучше, но в cp1251 есть не все символы. Сайт будет не только на русском и английском языках. Точно знаю что бцдет польская версия. А у них там есть символы с хвостиками с какими то :) Их в cp1251 нет, поэтому при перекодировке они потеряются. | |
|
|
|
|
|
|
|
для: Евгений Петров
(30.12.2006 в 23:03)
| | ааа. Ну тогда "символы с хвостиками" тоже можно таким же образом переводить, через strtr(). | |
|
|
|
|
|
|
|
для: Unkind
(30.12.2006 в 23:22)
| | Да нет, это только усложнит проблемму. Все такие символы вбить - с ума можно сойти, да и обработка их создаст лишнюю нагрузку. | |
|
|
|
|
|
|
|
для: Евгений Петров
(30.12.2006 в 23:38)
| | Ну...Можно попробовать типа такого:
<?php
function unicode_to_upper($letter)
{
if((ord($letter) >= 192) && (ord($letter) <= 223))
{
$hexvalue = dechex(ord($letter) + 848 + 32);
if($letter == "Ё") $hexvalue = "451";
return "�".$hexvalue.";";
}
else
{
return $letter;
}
}
$string = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ";
$unicode = "";
for($i = 0; $i < strlen($string); $i++)
{
$unicode .= unicode_to_upper($string[$i]);
}
echo($unicode);
?>
|
Только надо будет знать диапозоны таких буковок. Я, например, для Windows-1251 нашел (от 192 до 223 заглавные, 224 до 255 прописные), для других языков будет по-другому... | |
|
|
|
|
|
|
|
для: Unkind
(31.12.2006 в 00:44)
| | Понимаете, проблемма не в том, чтобы к верхнему регистру привести строку. Нужен полный пакет для работы со строками в юникоде. Все строковые функции, регулярные выражение и т.д. и т.п. | |
|
|
|