Ñòàíäàðòíàÿ ôóíêöèÿ PHP soundex() íå ðàáîòàåò ñ êèðèëèöåé.
Íà ïðåäëîæèëè àëãîðèòì soundex'a äëÿ ðóññêîãî ÿçûêà.  òîò ìîìåíò êîãäà îí ìíå ïîíàäîáèëñÿ âûÿñíèëîñü, ÷òî àëãîðèòì íå ñîâåðøåíåí (ñì. êîììåíòàðèè íà õàáðå) è ÷àñòî ïóòàåò ñîâåðøåííî ðàçíûå ñëîâà. Òåì íå ìåíåå, êàê ïðàâèëüíî çàìåòèë àâòîð àëãîðèòìà - äëÿ ôîëáýêà è ñïåöñèñòåì îí âïîëíå ñãîäèòñÿ. Äëÿ ñâîåé æå çàäà÷è ÿ èñïîëüçîâàë êàê ýòî íè ñòðàííî metaphone äëÿ àíãëèéñêîãî ÿçûêà, ïðåäâàðèòåëüíî òðàíñëèòåðèðîâàâ ðóññêèå ñëîâà.
Èñõîäíûé êîä àëãîðèòìà soundex äëÿ ðóññêîãî ÿçûêà:
<?php
function dmword($string, $is_cyrillic = true)
{
static $codes = array(
'A' => array(array(0, -1, -1),
'I' => array(array(0, 1, -1)),
'J' => array(array(0, 1, -1)),
'Y' => array(array(0, 1, -1)),
'U' => array(array(0, 7, -1))),
'B' => array(array(7, 7, 7)),
'C' => array(array(5, 5, 5), array(4, 4, 4),
'Z' => array(array(4, 4, 4),
'S' => array(array(4, 4, 4))),
'S' => array(array(4, 4, 4),
'Z' => array(array(4, 4, 4))),
'K' => array(array(5, 5, 5), array(45, 45, 45)),
'H' => array(array(5, 5, 5), array(4, 4, 4),
'S' => array(array(5, 54, 54)))),
'D' => array(array(3, 3, 3),
'T' => array(array(3, 3, 3)),
'Z' => array(array(4, 4, 4),
'H' => array(array(4, 4, 4)),
'S' => array(array(4, 4, 4))),
'S' => array(array(4, 4, 4),
'H' => array(array(4, 4, 4)),
'Z' => array(array(4, 4, 4))),
'R' => array(
'S' => array(array(4, 4, 4)),
'Z' => array(array(4, 4, 4)))),
'E' => array(array(0, -1, -1),
'I' => array(array(0, 1, -1)),
'J' => array(array(0, 1, -1)),
'Y' => array(array(0, 1, -1)),
'U' => array(array(1, 1, -1))),
'F' => array(array(7, 7, 7),
'B' => array(array(7, 7, 7))),
'G' => array(array(5, 5, 5)),
'H' => array(array(5, 5, -1)),
'I' => array(array(0, -1, -1),
'A' => array(array(1, -1, -1)),
'E' => array(array(1, -1, -1)),
'O' => array(array(1, -1, -1)),
'U' => array(array(1, -1, -1))),
'J' => array(array(4, 4, 4)),
'K' => array(array(5, 5, 5),
'H' => array(array(5, 5, 5)),
'S' => array(array(5, 54, 54))),
'L' => array(array(8, 8, 8)),
'M' => array(array(6, 6, 6),
'N' => array(array(66, 66, 66))),
'N' => array(array(6, 6, 6),
'M' => array(array(66, 66, 66))),
'O' => array(array(0, -1, -1),
'I' => array(array(0, 1, -1)),
'J' => array(array(0, 1, -1)),
'Y' => array(array(0, 1, -1))),
'P' => array(array(7, 7, 7),
'F' => array(array(7, 7, 7)),
'H' => array(array(7, 7, 7))),
'Q' => array(array(5, 5, 5)),
'R' => array(array(9, 9, 9),
'Z' => array(array(94, 94, 94), array(94, 94, 94)), // special case
'S' => array(array(94, 94, 94), array(94, 94, 94))), // special case
'S' => array(array(4, 4, 4),
'Z' => array(array(4, 4, 4),
'T' => array(array(2, 43, 43)),
'C' => array(
'Z' => array(array(2, 4, 4)),
'S' => array(array(2, 4, 4))),
'D' => array(array(2, 43, 43))),
'D' => array(array(2, 43, 43)),
'T' => array(array(2, 43, 43),
'R' => array(
'Z' => array(array(2, 4, 4)),
'S' => array(array(2, 4, 4))),
'C' => array(
'H' => array(array(2, 4, 4))),
'S' => array(
'H' => array(array(2, 4, 4)),
'C' => array(
'H' => array(array(2, 4, 4))))),
'C' => array(array(2, 4, 4),
'H' => array(array(4, 4, 4),
'T' => array(array(2, 43, 43),
'S' => array(
'C' => array(
'H' => array(array(2, 4, 4))),
'H' => array(array(2, 4, 4))),
'C' => array(
'H' => array(array(2, 4, 4)))),
'D' => array(array(2, 43, 43)))),
'H' => array(array(4, 4, 4),
'T' => array(array(2, 43, 43),
'C' => array(
'H' => array(array(2, 4, 4))),
'S' => array(
'H' => array(array(2, 4, 4)))),
'C' => array(
'H' => array(array(2, 4, 4))),
'D' => array(array(2, 43, 43)))),
'T' => array(array(3, 3, 3),
'C' => array(array(4, 4, 4),
'H' => array(array(4, 4, 4))),
'Z' => array(array(4, 4, 4),
'S' => array(array(4, 4, 4))),
'S' => array(array(4, 4, 4),
'Z' => array(array(4, 4, 4)),
'H' => array(array(4, 4, 4)),
'C' => array(
'H' => array(array(4, 4, 4)))),
'T' => array(
'S' => array(array(4, 4, 4),
'Z' => array(array(4, 4, 4)),
'C' => array(
'H' => array(array(4, 4, 4)))),
'C' => array(
'H' => array(array(4, 4, 4))),
'Z' => array(array(4, 4, 4))),
'H' => array(array(3, 3, 3)),
'R' => array(
'Z' => array(array(4, 4, 4)),
'S' => array(array(4, 4, 4)))),
'U' => array(array(0, -1, -1),
'E' => array(array(0, -1, -1)),
'I' => array(array(0, 1, -1)),
'J' => array(array(0, 1, -1)),
'Y' => array(array(0, 1, -1))),
'V' => array(array(7, 7, 7)),
'W' => array(array(7, 7, 7)),
'X' => array(array(5, 54, 54)),
'Y' => array(array(1, -1, -1)),
'Z' => array(array(4, 4, 4),
'D' => array(array(2, 43, 43),
'Z' => array(array(2, 4, 4),
'H' => array(array(2, 4, 4)))),
'H' => array(array(4, 4, 4),
'D' => array(array(2, 43, 43),
'Z' => array(
'H' => array(array(2, 4, 4))))),
'S' => array(array(4, 4, 4),
'H' => array(array(4, 4, 4)),
'C' => array(
'H' => array(array(4, 4, 4))))));
$length = strlen($string);
$output = '';
$i = 0;
$previous = -1;
while ($i < $length)
{
$current = $last = &$codes[$string[$i]];
for ($j = $k = 1; $k < 7; $k++)
{
if (!isset($string[$i + $k]) ||
!isset($current[$string[$i + $k]]))
break;
$current = &$current[$string[$i + $k]];
if (isset($current[0]))
{
$last = &$current;
$j = $k + 1;
}
}
if ($i == 0)
$code = $last[0][0];
elseif (!isset($string[$i + $j]) || ($codes[$string[$i + $j]][0][0] != 0))
$code = $is_cyrillic ? (isset($last[1]) ? $last[1][2] : $last[0][2]) : $last[0][2];
else
$code = $is_cyrillic ? (isset($last[1]) ? $last[1][1] : $last[0][1]) : $last[0][1];
if (($code != -1) && ($code != $previous))
$output .= $code;
$previous = $code;
$i += $j;
}
return str_pad(substr($output, 0, 6), 6, '0');
}
function dmstring($string)
{
$is_cyrillic = false;
if (preg_match('#[À-ßà-ÿ]#i', $string) === 1)
{
$string = translit($string);
$is_cyrillic = true;
}
$string = preg_replace(array('#[^\w\s]|\d#i', '#\b[^\s]{1,3}\b#i', '#\s{2,}#i', '#^\s+|\s+$#i'),
array('', '', ' '), strtoupper($string));
if (!isset($string[0]))
return null;
$matches = explode(' ', $string);
foreach($matches as $key => $match)
$matches[$key] = dmword($match, $is_cyrillic);
return $matches;
}
function translit($string)
{
static $ru = array(
'À', 'à', 'Á', 'á', 'Â', 'â', 'Ã', 'ã', 'Ä', 'ä', 'Å', 'å', '¨', '¸', 'Æ', 'æ', 'Ç', 'ç',
'È', 'è', 'É', 'é', 'Ê', 'ê', 'Ë', 'ë', 'Ì', 'ì', 'Í', 'í', 'Î', 'î', 'Ï', 'ï', 'Ð', 'ð',
'Ñ', 'ñ', 'Ò', 'ò', 'Ó', 'ó', 'Ô', 'ô', 'Õ', 'õ', 'Ö', 'ö', '×', '÷', 'Ø', 'ø', 'Ù', 'ù',
'Ú', 'ú', 'Û', 'û', 'Ü', 'ü', 'Ý', 'ý', 'Þ', 'þ', 'ß', 'ÿ'
);
static $en = array(
'A', 'a', 'B', 'b', 'V', 'v', 'G', 'g', 'D', 'd', 'E', 'e', 'E', 'e', 'Zh', 'zh', 'Z', 'z',
'I', 'i', 'J', 'j', 'K', 'k', 'L', 'l', 'M', 'm', 'N', 'n', 'O', 'o', 'P', 'p', 'R', 'r',
'S', 's', 'T', 't', 'U', 'u', 'F', 'f', 'H', 'h', 'C', 'c', 'Ch', 'ch', 'Sh', 'sh', 'Sch', 'sch',
'\'', '\'', 'Y', 'y', '\'', '\'', 'E', 'e', 'Ju', 'ju', 'Ja', 'ja'
);
$string = str_replace($ru, $en, $string);
return $string;
}
echo 'Àðíîëüä Øâàðöíåããåð '.implode(' ', dmstring('Àðíîëüä Øâàðöíåããåð'))."\n";
echo 'Arnold Schwarzenegger '.implode(' ', dmstring('Arnold Schwarzenegger'))."\n";
echo 'Îðíîëüä Øâîðöíåãèð '.implode(' ', dmstring('Îðíîëüä Øâîðöíåãèð'))."\n";
?>Ñêîïèðîâàòü â áóôåð
Âçÿòî ñ http://p2k.ru/archives/57.
<?php
# to Arthur
// (cc) me, 23/08/2007-27/08/2007
$str = "ê ñêàëàì áóðûì";
print "ru_soundex($str) = ".ru_soundex($str)."<br />\r\n";
$str = "ñ êàëàìáóðîì";
print "ru_soundex($str) = ".ru_soundex($str)."<br />\r\n";;
function ru_soundex($source)
{
$res = '';
$literal = array();
// àññîöèàòèâíûé ìàññèâ áóêâ
// ïàðàìåòðû çâóêîâ ãëàñíûé / ñîãëàñíûé
// äëÿ ãëàñíûõ ïåðåõîä áóêâû â çâóê(è), ðåäóöèðîâàííûé/íåò, ïðåäïîëàãàåìûå ïðàâèëà óäàðåíèÿ èñõîäÿ èç êîë-âà ñëîãîâ (stressed syllable)
// ðåàëèçîâàíà ïðîâåðêà ïðåäïîëàãàåìîãî óäàðåíèÿ
// äëÿ ñîãëàñíûõ ïåðåõîä áóêâ[û] â çâóê(è), ðåäóöèðóåìûé/íåò, ïðàâèëà ðåäóöèðîâàíèÿ
// vowel
$literal['À'] = array('status'=>'ãëàñíûé','sound'=>'à','stressed'=>'à'); // íèêîãäà íå ìåíÿåòñÿ
$literal['Å'] = array('status'=>'ãëàñíûé','sound'=>'è','stressed'=>'ý', 'ÀàÅ娸ÈèÎîÓóÝýÞþßÿÜüÛûÚú' => 'éý'); // - îñîáûå ïðàâèëà, äëÿ ýòîé áóêâû, ñòîÿùåé ïîñëå óêàçàííûõ, à òàêæå â íà÷àëå ñëîâ
$literal['¨'] = array('status'=>'ãëàñíûé','sound'=>'î','stressed'=>'î', 'ÀàÅ娸ÈèÎîÓóÝýÞþßÿÜüÛûÚú' => 'éî');
$literal['È'] = array('status'=>'ãëàñíûé','sound'=>'è','stressed'=>'è');
$literal['Î'] = array('status'=>'ãëàñíûé','sound'=>'à','stressed'=>'î');
$literal['Ó'] = array('status'=>'ãëàñíûé','sound'=>'ó','stressed'=>'ó');
$literal['Û'] = array('status'=>'ãëàñíûé','sound'=>'û','stressed'=>'û');
$literal['Ý'] = array('status'=>'ãëàñíûé','sound'=>'ý','stressed'=>'ý');
$literal['Þ'] = array('status'=>'ãëàñíûé','sound'=>'ó','stressed'=>'ó', 'ÀàÅ娸ÈèÎîÓóÝýÞþßÿÜüÛûÚú' => 'éó');
$literal['ß'] = array('status'=>'ãëàñíûé','sound'=>'à','stressed'=>'à', 'ÀàÅ娸ÈèÎîÓóÝýÞþßÿÜüÛûÚú' => 'éà'); // çàÿö ïðîèçíîñèòñÿ êàê [çàéåö]
$v_pattern = 'ÀàÅ娸ÈèÎîÓóÝýÞþßÿÜüÛûÚú';
// êñòàòè, íàäî äîáàâèòü âûêóñûâàíèå ãëàñíûõ èç êîíöîâ ñëîâ, çàêàí÷èâàþùèõñÿ íà ñîãëàñíûé-ãëàñíûé-çâîíêèé ñîãëàñíûé (-ðîì, -ëåì, èòä) ãëàñíàÿ î÷åíü ÷àñòî ñãëàòûâàåòñÿ
// çû: ýòî çäåñü íå ðåàëèçîâàíî %)
// ïðîâåðåíî: soundex è ñàì ñ ýòèì íåïëîõî ñïðàâëÿåòñÿ
// çâîíêèå ñîãëàñíûå ðåäóöèðóþòñÿ ïðè óäâîåíèè.
// çâîíêèå ñîãëàñíûå ïåðåõîäÿò â ïàðíûé ãëóõîé ïåðåä ãëóõèì
// ãëóõèå ðåäóöèðóþòñÿ ïîëíîñòüþ ïåðåä ãëóõèìè.
// consonant
// â îòëè÷èå îò ãëàñíûõ, äëÿ ñîãëàñíûõ óñëîâèå "ñòîèò ïåðåä óêàçàííîé èëè â êîíöå ñëîâà"
$literal['Á'] = array('status'=>'ñîãëàñíûé','sound'=>'á', 'ÊêÏïÑñÒòÔôÕõÖö×÷ØøÙù' => 'ï');
$literal['Â'] = array('status'=>'ñîãëàñíûé','sound'=>'â', 'ÊêÏïÑñÒòÔôÕõÖö×÷ØøÙù' => 'ô');
$literal['Ã'] = array('status'=>'ñîãëàñíûé','sound'=>'Ã', 'ÊêÏïÑñÒòÔôÕõÖö×÷ØøÙù' => 'ê');
$literal['Ä'] = array('status'=>'ñîãëàñíûé','sound'=>'ä', 'ÊêÏïÑñÒòÔôÕõÖö×÷ØøÙù' => 'ò');
$literal['Æ'] = array('status'=>'ñîãëàñíûé','sound'=>'æ', 'ÊêÏïÑñÒòÔôÕõÖö×÷ØøÙù' => 'ø');
$literal['Ç'] = array('status'=>'ñîãëàñíûé','sound'=>'ç', 'ÊêÏïÑñÒòÔôÕõÖö×÷ØøÙù' => 'ñ');
$literal['É'] = array('status'=>'ñîãëàñíûé','sound'=>'é');
$literal['Ê'] = array('status'=>'ñîãëàñíûé','sound'=>'ê', 'ÊêÏïÑñÒòÔôÕõÖö×÷ØøÙù' => '');
$literal['Ë'] = array('status'=>'ñîãëàñíûé','sound'=>'ë');
$literal['Ì'] = array('status'=>'ñîãëàñíûé','sound'=>'ì');
$literal['Í'] = array('status'=>'ñîãëàñíûé','sound'=>'í');
$literal['Ï'] = array('status'=>'ñîãëàñíûé','sound'=>'ï', 'ÊêÏïÑñÒòÔôÕõÖö×÷ØøÙù' => '');
$literal['Ð'] = array('status'=>'ñîãëàñíûé','sound'=>'ð');
$literal['Ñ'] = array('status'=>'ñîãëàñíûé','sound'=>'ñ'); // à âîò Ñ íå õî÷åò ðåäóöèðîâàòüñÿ, íà ïåðâûé âçãëÿä...
$literal['Ò'] = array('status'=>'ñîãëàñíûé','sound'=>'ò', 'ÊêÏïÑñÒòÔôÕõÖö×÷ØøÙù' => '');
$literal['Ô'] = array('status'=>'ñîãëàñíûé','sound'=>'ô', 'ÊêÏïÑñÒòÔôÕõÖö×÷ØøÙù' => ''); // ñïîðíî
$literal['Õ'] = array('status'=>'ñîãëàñíûé','sound'=>'õ');
$literal['Ö'] = array('status'=>'ñîãëàñíûé','sound'=>'ö');
$literal['×'] = array('status'=>'ñîãëàñíûé','sound'=>'÷ü'); // âñåãäà ìÿãêèé
$literal['Ø'] = array('status'=>'ñîãëàñíûé','sound'=>'ø');
$literal['Ù'] = array('status'=>'ñîãëàñíûé','sound'=>'ùü');
// ñïåöñèìâîëû
$literal['Ú'] = array('status'=>'çíàê','sound'=>' '); // òîëüêî ðàçäåëèòåëüíûé. äåëèò æ¸ñòêî
$literal['Ü'] = array('status'=>'çíàê','sound'=>'ü'); // äàæå åñëè äåëèò, òî ìÿãêî
$literal['ÒÑ'] = array('status'=>'ñî÷åòàíèå','sound'=>'ö');
$literal['ÒÜÑ'] = $literal['ÒÑ'];
$literal['ØÜ'] = array('status'=>'ñî÷åòàíèå','sound'=>'ø'); // âñåãäà òâ¸ðäûé. è ýòî íå åäèíñòåííûé ðóäèìåíò ÿçûêà
$literal['ÑÎËÍÖ'] = array('status'=>'ñî÷åòàíèå','sound'=>'ñîíö');
$literal['ßÈ×ÍÈÖ'] = array('status'=>'ñî÷åòàíèå','sound'=>'åèøíèö');
$literal['ÊÎÍÅ×ÍÎ'] = array('status'=>'ñî÷åòàíèå','sound'=>'êàíåøíî');
$literal['×ÒÎ'] = array('status'=>'ñî÷åòàíèå','sound'=>'øòî');
$literal['ÇÀß'] = array('status'=>'ñî÷åòàíèå','sound'=>'çàéý'); // äà-äà. íå òîëüêî [çàéýö], íî è [çàéýâëüýíèéý]
$sound = str_to_upper($source);
// ñíà÷àëà ñî÷åòàíèÿ
foreach( array_filter($literal,
create_function('$item','if( $item["status"] === "ñî÷åòàíèå") return true; return false;'))
as $sign => $translate )
$sound = str_replace($sign,$translate["sound"],$sound);
// ïîòîì çíàêè
foreach( array_filter($literal,
create_function('$item','if( $item["status"] === "çíàê") return true; return false;'))
as $sign => $translate )
$sound = str_replace($sign,$translate["sound"],$sound);
// ðàçäåëÿåì íà ñëîâà, îïðåäåëÿåì êîë-âî ñëîãîâ, çàìåíÿåì óäàðíûé/áåçóäàðíûé ãëàñíûé (åäèíñòâåííûé èëè ïðåäïîëàãàÿ âòîðîé â äâóõ-òð¸õñëîæíîì ñëîâå, ïðåäïðåäïîñëåäíèé - â îñòàëüíûõ)
$words = preg_split('~[,.\~`1234567890-=\~!@#$%^&*()_+|{}\]\];:\'"<>/? ]~', $sound, -1, PREG_SPLIT_NO_EMPTY);
// ãëàñíûå
foreach( array_filter($literal,
create_function('$item','if( $item["status"] === "ãëàñíûé") return true; return false;'))
as $sign => $translate )
{
// äëÿ êàæäîãî ñëîâà
foreach( $words as &$word )
{
// êîë-âî ãëàñíûõ
$vowel = preg_match_all("~[$v_pattern]~", $word, $del_me );
// ãîòîâèì
$cur_pos = 0;
$cur_vowel = 0;
while( false !== $cur_pos = strpos($word,$sign,$cur_pos) )
{
$cur_vowel++;
// print $cur_pos.' = '.$sound[$cur_pos]."<br />\r\n";
if( sizeof($translate)==4 && ($cur_pos === 0 || strpos( $v_pattern , $word[$cur_pos-1] )))
{
$word = substr_replace($word,$translate[$v_pattern],$cur_pos,1);
}
elseif( 1 == $vowel )
$word = substr_replace($word,$translate["stressed"],$cur_pos,1); //
elseif( 2 == $vowel && 1 == $cur_vowel )
$word = substr_replace($word,$translate["stressed"],$cur_pos,1); // ïðåäïîëàãàåì, ÷òî â äâóõñëîæíûõ ñëîâàõ ïåðâûé ñëîã óäàðíûé
elseif( 3 <= $vowel && $cur_vowel == $vowel - 2 )
$word = substr_replace($word,$translate["stressed"],$cur_pos,1); // ïðåäïîëàãàåì, ÷òî ñëîã óäàðíûé ïðåäïðåäïîñëåäíèé
else
$word = substr_replace($word,$translate["sound"],$cur_pos,1);
$cur_pos++;
}
}
}
$sound = implode( $words, ' ' ); // êëåèì îáðàòíî
// ñîãëàñíûå
foreach( array_filter($literal,
create_function('$item','if( $item["status"] === "ñîãëàñíûé") return true; return false;'))
as $sign => $translate )
{
// ãîòîâèì
$cur_pos = 0;
while( false !== $cur_pos = strpos($sound,$sign,$cur_pos) )
{
// print $cur_pos.' = '.$sound[$cur_pos]."<br />\r\n";
if( sizeof($translate)==3 )
{
$x = array_pop(array_keys($translate)); // ñíèìàåì òðåòèé ýëåìåíò
if( strpos( $x, $sound[$cur_pos+1] ) || $cur_pos === strlen($sound) )
{
$sound = substr_replace($sound,$translate[$x],$cur_pos,1);
} elseif ( $sound[$cur_pos] === $sound[$cur_pos+1] )
$sound = substr_replace($sound,$translate["sound"],$cur_pos,2); // âñå äâîéíûå ðåäóöèðóþòñÿ
else
$sound = substr_replace($sound,$translate["sound"],$cur_pos,1);
} else
{
$sound = substr_replace($sound,$translate["sound"],$cur_pos,1);
}
$cur_pos++;
}
}
// àëåñ. ôîíåìû ïðèâåëè ê îäíîìó âèäó
// äàëüøå èñïîëüçóåì ëþáîé àëãîðèòì äëÿ âû÷èñëåíèÿ ÷èñëîâîãî ýêâèâàëåíòà
// íî îñòà¸òñÿ ñîìíåíèå. î÷åíü õî÷åòñÿ ðàññòàòüñÿ ñ ãëóõèìè ïðåäëîãàìè ïåðåä ãëóõèìè ñîãëàñíûìè ("ê ñêàëàì")
$sound = preg_replace('~[,.\~`1234567890-=\~!@#$%^&*()_+|{}\]\];:\'"<>/? ]~','',$sound) ;
// print $sound;
// print str_to_translit($sound);
// print soundex(str_to_translit($sound));
$res = str_to_upper($source[0]).substr(soundex(str_to_translit($sound)),1);
return $res;
}
// (c) http://ru2.php.net/manual/en/function.strtoupper.php#74574
//Russian
function str_to_upper($str){
return strtr($str,
"abcdefghijklmnopqrstuvwxyz".
"\xE0\xE1\xE2\xE3\xE4\xE5".
"\xb8\xe6\xe7\xe8\xe9\xea".
"\xeb\xeC\xeD\xeE\xeF\xf0".
"\xf1\xf2\xf3\xf4\xf5\xf6".
"\xf7\xf8\xf9\xfA\xfB\xfC".
"\xfD\xfE\xfF",
"ABCDEFGHIJKLMNOPQRSTUVWXYZ".
"\xC0\xC1\xC2\xC3\xC4\xC5".
"\xA8\xC6\xC7\xC8\xC9\xCA".
"\xCB\xCC\xCD\xCE\xCF\xD0".
"\xD1\xD2\xD3\xD4\xD5\xD6".
"\xD7\xD8\xD9\xDA\xDB\xDC".
"\xDD\xDE\xDF");
}
function str_to_translit($str){
return strtr($str,
"abcdefghijklmnopqrstuvwxyz".
"\xE0\xE1\xE2\xE3\xE4\xE5".
"\xb8\xe6\xe7\xe8\xe9\xea".
"\xeb\xeC\xeD\xeE\xeF\xf0".
"\xf1\xf2\xf3\xf4\xf5\xf6".
"\xf7\xf8\xf9\xfA\xfB\xfC".
"\xfD\xfE\xfF",
"abcdefghijklmnopqrstuvwxyz".
"abvgde".
"?*ziik".
"lmnopr".
"stufhc".
"4ww\"y`".
"eua");
}
?>Ñêîïèðîâàòü â áóôåð
Âçÿòî çäåñü: http://ru-php.livejournal.com/1062493.html.
© Copyright 2008-2012 by KDG