Судя по всему (но не факт!), вот этот код содержит багу, из-за которой после редактирования сообщения на нашем форуме к смайликам добавляется сочетание "/>".
Я буду, конечно, сам пытаться вкурить, что здесь не так, но может, коллективный разум быстрее подскажет, где зарылась собака.
public static function unconvertSmilies( $txt )
{
//-----------------------------------------
// Unconvert smilies
//-----------------------------------------
$txt = str_replace( "<#EMO_DIR#>", "<#EMO_DIR>", $txt );
preg_match_all( "#(<img(?:[^>]+?)class=['\"]bbc_emoticon[\"'](?:[^>]+?)alt=['\"](.+?)[\"'](?:[^>]+?))#is", $txt, $matches );
if( is_array($matches[1]) AND count($matches[1]) )
{
foreach( $matches[1] as $index => $value )
{
if ( count( ipsRegistry::cache()->getCache('emoticons') ) > 0 )
{
foreach( ipsRegistry::cache()->getCache('emoticons') as $row )
{
$_emoCode = str_replace( '<', '<', str_replace( '>', '>', $row['typed'] ) );
if( $matches[2][ $index ] == $_emoCode )
{
/* We need to make sure emoticons are wrapped in spaces so they are parsed properly */
//$txt = str_replace( $value, ' ' . $_emoCode . ' ', $txt );
/* We are no longer matching opening/closing "space" so no need to add it */
$txt = str_replace( $value, $_emoCode, $txt );
continue 2;
}
}
}
}
}
$txt = str_replace( "<#EMO_DIR>", "<#EMO_DIR#>", $txt );
return $txt;
}
Вариантов может быть несколько. Либо сообщение портится, перед тем как записаться в БД и уходит туда уже со скобками. Но тогда возникает вопрос, почему оно из БД достается в нормальном виде? Мы-то видим его при просмотре нормально. Значит, этот вариант отпадает.
Либо, второй вариант, сообщение портится, когда включается редактирование уже существующего сообщения. Сначала сообщение нормально извлекается из БД, а потом портится вышеприведенными функциями, которые осуществляют преEdit-парсинг.
Мое мнение - проинсталлить на тестовом компе чистый движок, запихать текущую копию БД и проверить на глюк. Если пропало - траблы в коде, не пропало - в БД. Гадать просто замучитесь... Я хорошо помню, когда глюк вылез, никто ничего с движком не делал, 100%.
/>/>/> узнать, примерно, когда пошёл баг с цитированием\редактированием
и посмотреть на сервере последнюю дату изменения файлов
даты не совпадают-смотреть БД
редактируем />/>
на тему смайлов и бб кодов-в конце смайла должно идти такое . или нет?
test_check
Сообщение отредактировал Moloch: 03 апреля 2014 - 16:10
Хоть смайлы портятся и в конце строки без окончания пробелом, и будучи окруженными пробелами, меня смущает закоменченность этой строки:
/* We need to make sure emoticons are wrapped in spaces so they are parsed properly */
//$txt = str_replace( $value, ' ' . $_emoCode . ' ', $txt );
/* We are no longer matching opening/closing "space" so no need to add it */
Какова предыстория сего действа?
Сообщение отредактировал Dolphin: 03 апреля 2014 - 16:09