|
|
|
| В очередной раз пришлось с этим столкнуться, я взял за основу функцию Андрея Дрыги (http://softtime.ru/scripts/translit.php) и попытался добить ее до верной обработки UTF-8
Прошу меня поправить, если что не так... )
Итак, скрипт крутится в директории с addDefaultCharset utf8.
<?php
function encodeUTF8string($st){
//конвертируем строку
$st = iconv("UTF-8", "cp1251", $st);
//односимвольные замены - строчные
$st=strtr($st, iconv("UTF-8", "cp1251", "абвгдеёзийклмнопрстуфхыэ_"),
"abvgdeeziyklmnoprstufhye_");
//односимвольные замены - ПРОПИСНЫЕ
$st=strtr($st, iconv("UTF-8", "cp1251", "АБВГДЕЁЗИЙКЛМНОПРСТУФХЫЭ_"),
"ABVGDEEZIYKLMNOPRSTUFHYE_");
//многосимвольные - обрабатываем и кладем в массив
$dbyte = iconv("UTF-8", "cp1251", "ж=ц=ч=ш=щ=ь=ю=я=Ж=Ц=Ч=Ш=Щ=Ь=Ю=Я=ї=Ї=є=Є=ъ=Ъ");
$dbyte = explode("=", $dbyte);
//Замены многосимвольных - тоже в массив
//некоторые символы заменяются на ничто, например,
//если речь идет об имени файла, там апострофы ни к чему
$dbyte_replace = "zh=ts=ch=sh=sch==yu=ya=ZH=TS=CH=SH=SCH==YU=YA=yi=Yi=ie=Ye===";
$dbyte_replace = explode("=", $dbyte_replace);
//Составляем ассоциативный массив замен $rep
$i = 0;
$rep = array();
foreach($dbyte as $o){
$rep[$o] = $dbyte_replace[$i];
$i ++;
}
//применяем полученный массив для замены оставшихся кириллических букв в строке
$st = strtr($st, $rep);
return $st;
}
$string = "Экс-граф! Плюш изъят. Бьём чуждый цен хвощ.";
echo encodeUTF8string($string);
?>
|
| |
|
|