Как преобразовать текст Win-1251 в "latinnicu

Prolix

Новичок
Как преобразовать текст Win-1251 в "latinnicu

Собственно, сабж.
Знаю, что при помощи eregi_replace, но может кто подкинет сам expression.
Типа, чтоб не только б-b, д-d, но и, к примеру, ж-zh, я-ja.
Thanks.
 

DJ Rabbit

Guest
Как преобразовать текст Win-1251 в "latin

Хм... можно при помощи preg_replace (он в качестве шаблонов и замен принимает массивы), а как с ereg - не представляю. Сам для себя писал простенький скрипт - могу прислать, если надо.
 

Prolix

Новичок
Всем большое спасибо!
Объединив написанное, пришел к собственному выводу:

<?php

if (!$text) {
$out = <<<out
<form name=$PHP_SELF method=post>
<textarea wrap cols=40 rows=20 name=text></textarea>
<br><input type=submit>
</form>
out;
echo $out;
}

else {
$text = stripslashes(trim($text));

echo "<b>OLD TEXT</b>:<br>" . $text . "<br><br>";

//!------SAMIJE GLAVNIJE STROCHKI
$pattern = array("'а'","'б'","'в'","'г'","'д'","'е'","'ж'","'з'","'и'","'й'","'к'","'л'","'м'","'н'","'о'","'п'","'р'","'с'","'т'","'у'","'ф'","'х'","'ц'","'ч'","'ш'","'щ'","'ъ'","'ы'","'ь'","'э'","'ю'","'я'", "'А'","'Б'","'В'","'Г'","'Д'","'Е'","'Ж'","'З'","'И'","'Й'","'К'","'Л'","'М'","'Н'","'О'","'П'","'Р'","'С'","'Т'","'У'","'Ф'","'Х'","'Ц'","'Ч'","'Ш'","'Щ'","'Ъ'","'Ы'","'Ь'","'Э'","'Ю'","'Я'");

$replacement = array("a","b","v","g","d","e","zh","z","i","j","k","l","m","n","o","p","r","s","t","u","f","h","c","ch","sh","sch","'","y","'","e","ju","ja", "A","B","V","G","D","E","Zh","Z","I","J","K","L","M","N","O","P","R","S","T","U","F","H","C","Ch","Sh","Sch","'","Y","'","E","Ju","Ja");

$new_text = preg_replace ($pattern, $replacement, $text);
//!------SAMIJE GLAVNIJE STROCHKI

echo "<b>NEW TEXT</b>:<br>" . $new_text . "<br><br>";
}
?>

Мне все-таки показалось, что именно preg_replace делает то, что моя душенька хотела (thanks DJ Rabbit :)
 

Prolix

Новичок
Vitaliy:
кто знает...
меня интересовал только один вариант - Win1251, о чем я, собственно, и задал вопрос... :) Ну, в этой кодировке точно работает. Соответственно, для кои наверно, в коде надо поменять все на соответствующие символы.

Vitaliy писал(а):
-------------------------------
А интересно как оно будет реагировать на разные кодировки?
к примеру win-1251/koi8-r...?
:)
 

walker_ag

Новичок
Спасибо за скрипт!
Оказался очень к месту.
Заточил вариант с preg_replace для собственных нужд:
- оформил как функцию
- изменил таблицу для того, чтобы обеспечить однозначное соответствие(э как e' вместо просто e)
- добавил букву 'ё' (ну нравится она мне ;) )
- изменил Ъ c " на ~
- слепил функцию latinica -> win1251.
Для того, чтобы получить код для другой кодировки можно:
a) использовать w1251_to_lat(convert_cyr_string($s,'k','w'))
б) внутри функции вызывать preg_replace ($pattern, $replacement, convert_cyr_string($s,'k','w'));
в) Прогнать файл с кодом функций через любой конвертер кодировки текста.


Вот результат издевательства над кодом:
#--------------------------------------------------------
function w1251_to_lat($s) {
$pattern = array(
"'а'","'б'","'в'","'г'","'д'","'е'","'ё'","'ж'","'з'","'и'","'й'","'к'","'л'","'м'","'н'","'о'","'п'","'р'","'с'","'т'","'у'","'ф'","'х'","'ц'","'ч'","'ш'","'щ'","'ъ'","'ы'","'ь'","'э'","'ю'","'я'",
"'А'","'Б'","'В'","'Г'","'Д'","'Е'","'Ё'","'Ж'","'З'","'И'","'Й'","'К'","'Л'","'М'","'Н'","'О'","'П'","'Р'","'С'","'Т'","'У'","'Ф'","'Х'","'Ц'","'Ч'","'Ш'","'Щ'","'Ъ'","'Ы'","'Ь'","'Э'","'Ю'","'Я'" );
$replacement = array(
"a", "b", "v", "g", "d", "e", "yo", "zh", "z", "i", "j", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "h", "c", "ch", "sh", "sch","~", "y", "'", "e'", "ju", "ja",
"A", "B", "V", "G", "D", "E", "Yo", "Zh", "Z", "I", "J", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "H", "C", "Ch", "Sh", "Sch","~", "Y", "'", "E'", "Ju", "Ja" );
return preg_replace ($pattern, $replacement, $s);
}

function lat_to_win1251($s) {
$replacement = array(
"Щ","щ","Ш","ш","Ю","ю","Я","я","Ё","ё","Ж","ж","Ч","ч","Э","э",
"а","б","в","г","д","е","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ъ","ы","ь",
"А","Б","В","Г","Д","Е","З","И","Й","К","Л","М","Н","О","П","Р","С","Т","У","Ф","Х","Ц","Ъ","Ы","Ь" );
$pattern = array(
"'Sch'", "'sch'", "'Sh'","'sh'","'Ju'","'ju'","'Ja'","'ja'", "'Yo'", "'yo'", "'Zh'","'zh'","'Ch'","'ch'","\"E'\"", "\"e'\"",
"'a'", "'b'", "'v'", "'g'", "'d'", "'e'", "'z'", "'i'", "'j'", "'k'", "'l'", "'m'", "'n'", "'o'", "'p'", "'r'", "'s'", "'t'", "'u'", "'f'", "'h'", "'c'", "'~'", "'y'", "\"'\"",
"'A'", "'B'", "'V'", "'G'", "'D'", "'E'", "'Z'", "'I'", "'J'", "'K'", "'L'", "'M'", "'N'", "'O'", "'P'", "'R'", "'S'", "'T'", "'U'", "'F'", "'H'", "'C'", "'~'", "'Y'", "\"'\"" );
return preg_replace ($pattern, $replacement, $s);

}

/* Test code:
echo "Translit: ". w1251_to_lat('а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я') . '<br>';
echo "Transli2: ". w1251_to_lat(strtoupper('а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я')) . '<br>';
$s = w1251_to_lat('Юркий плюшевый щенок Полуэктович выпендривался в подъезде стоя на пьедестале и дразнил цыган поцеживая мозги полёвки.');
echo $s.'<br>';
echo lat_to_win1251($s);
*/
 
Сверху