Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > не работает транслит если в сообщении есть смайл


Автор: Fx45 24.4.2008, 13:24
У меня такая проблема. В моём чате если в сообщении присутствует смайл то транслит не работает. Посоветуйте как можно это исправить

Автор: flashaa 24.4.2008, 13:25
Цитата(Fx45 @  24.4.2008,  13:24 Найти цитируемый пост)
Посоветуйте как можно это исправить 

Открый файл и редактировать. Тебя устраивает моя информативность? Меня твоя так же =)

Автор: Fx45 24.4.2008, 13:31
вот код

Автор: flashaa 24.4.2008, 13:56
Fx45, я вижу что у тебя проблема с кодировками. Твои редкие комментарии в cp1251; текст, который выводишь, - в utf-8.
Тыкни конкретно, где идет преобразование в транслит. Код едва читаем. Нет комментов почти. Кроме "микровремя" =)
Блоков if (($translit!=1) несколько...

Автор: Fx45 24.4.2008, 16:18
Код

if(@$msg)
{
$msg = trim(" $msg ");
$msg = ereg_replace(" +"," ",$msg);
$msg = substr($msg,0,400);
$msg = str_replace("", " ", $msg);
$msg = str_replace("$", "$$", $msg);
$msg = strtr($msg,array(chr("0")=>"",chr("1")=>"",chr("2")=>"",chr("3")=>"",chr("4")=>"",chr("5")=>"",chr("6")=>"",chr("7")=>"",chr("8")=>"",chr("9")=>"",chr("10")=>"",chr("11")=>"",chr("12")=>"",chr("13")=>"",chr("14")=>"",chr("15")=>"",chr("16")=>"",chr("17")=>"",chr("18")=>"",chr("19")=>"",chr("20")=>"",chr("21")=>"",chr("22")=>"",chr("23")=>"",chr("24")=>"",chr("25")=>"",chr("26")=>"",chr("27")=>"",chr("28")=>"",chr("29")=>"",chr("30")=>"",chr("31")=>""));
$msg = str_replace("к","С‘",$msg);
$msg = htmlspecialchars($msg);
$msg = str_replace("\"", """, $msg);
$msg = str_replace("|", "¦", $msg);
$msg = str_replace("'", "‘", $msg);
$msg = str_replace("\\", "", $msg);
$msg = addslashes($msg);
if ($row["translit"]==0) $msg = str_replace("'", "'", $msg);
if (!isset($prvt)) $prvt = 0;

$str1="";
$str2=$msg;

if (($translit==1)||($row["translit"]==1)){

$r = mysql_query("select user from users WHERE id = '".$towhom."' LIMIT 1;");
$a = mysql_fetch_array($r);
if (strpos($msg,$a["user"])===0)
{
$str1 = substr($msg,0,strlen($a["user"]));
$str2 = substr($msg,strlen($a["user"]),strlen($msg)-strlen($a["user"]));
$msg = $str2;
}
}
if ($prvt == 0) $towhom = "";
if (!isset($towhom)) $towhom = "";

if ($row["level"]<5) require("filtr.php");
require("smile.php");


$minpos = 500; $nm = 500;
for ($j=0;$j<=count($smiles)-1;$j++)
{
$tmpp = strpos($msg,$smiles[$j]);
if (($tmpp < $minpos)&&($tmpp !== false))
{
$minpos = $tmpp; $nm = $j;
};
};
if ($minpos !=500)
{
if (($translit!=1)||($row["translit"]==1))
{
$st1 = substr($msg,0,$minpos+strlen($smiles[$nm]));
$st2 = substr($msg,$minpos+strlen($smiles[$nm]),strlen($msg)-strlen($st1));
$st1_wosm = $st1;
$st1 = str_replace($smiles[$nm],$replaces[$nm],$st1);
if (strpos($replaces[$nm],"smilean/")!==false) $st1_woasm = $st1_wosm; else $st1_woasm = $st1;
$msg_woasm = $st1.$st2;
$msg_wosm = $st1_wosm.$st2;
$msg = $st1_woasm.$st2;
} else
{
$st1 = substr($msg,0,$minpos);
$st2 = substr($msg,$minpos, strlen($smiles[$nm]));
$st3 = substr($msg,$minpos+strlen($smiles[$nm]),strlen($msg)-strlen($st1)-strlen($st2));
if ($room!="room0") $st1 = trun_to_rus($st1);
$st2_wosm = $st2;
$st2 = $replaces[$nm];
if (strpos($replaces[$nm],"smilean/")!==false) $st2_woasm = $st2_wosm; else $st2_woasm = $st2;
if ($room!="room0") $st3 = trun_to_rus($st3);
$msg = $st1.$st2_woasm.$st3;
$msg_wosm = $st1.$st2_wosm.$st3;
$msg_woasm = $st1.$st2.$st3;
}
}
else if (($translit==1)||($row["translit"]==1)&&($room!="room0")) $msg = trun_to_rus($msg);
unset($smiles);
unset($replaces);
if($row["level"]>6)$msg = eregi_replace("((http://))((([a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z;]{2,3}))|(([0-9]{1,3}\.){3}([0-9]{1,3})))((/|\?)[a-z0-9~#%&'_\+=:;\?\.-]*)*)", "<a href=\"\\0\">\\3</a>", $msg);



if (($translit==1)||($row["translit"]==1)){
$nick=strtok($msg," ");
$msg=strstr($msg," ");
$msg = trun_to_rus($msg);
$msg=$nick.$msg;
}

$msg = $str1.$msg;
if (@$msg_wosm!="") $msg_wosm = $str1.$msg_wosm;
if (@$msg_woasm!="") $msg_woasm = $str1.$msg_woasm;
        if(($row["level"]>=6)  && $bold)
            $msg = '<b>'.$msg.'</b>';

        if (($row["level"]>=4) && $underline)
            $msg = '<u>'.$msg.'</u>';

         if (($row["level"]>=4) && $nakl)
            $msg = '<i>'.$msg.'</i>';

Автор: IZ@TOP 24.4.2008, 16:20
Жесть... я бы таких банил.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)