Wrap в почтовых сообщениях некорректно работает с UTF-8
в почтовых сообщениях строки обрезаются очень коротко. Это происходит из-за того, что функция php wordwrap некорректно работает с UTF-8 - русские символы у нее имеют длину 2, а английские - 1. Из-за этого нельзя просто в 2 раза увеличить границу - строки с английскими словами (например, url) разъедутся.
Я добавила функцию _wordwrap, и изменила на нее вызов в _drupal_wrap_mail_line (файл includes/mail.inc)
Кстати, во втором вызов wordwrap, которые предполагает обрезать слова, пропущен 4й параметр, который, собственно и должен указывать на обрезание. Иначе вызов функции с шириной 996 после ширины 77 не имеет смысла.
// Use soft-breaks only for purely quoted or unindented text.
$line = wordwrap($line, 77 - $values['length'], $values['soft'] ? " \n" : "\n");
// Break really long words at the maximum width allowed.
$line = wordwrap($line, 996 - $values['length'], $values['soft'] ? " \n" : "\n");
}
->
// Use soft-breaks only for purely quoted or unindented text.
$line = _wordwrap($line, 77 - $values['length'], $values['soft'] ? " \n" : "\n");
// Break really long words at the maximum width allowed.
$line = wordwrap($line, 996 - $values['length'], $values['soft'] ? " \n" : "\n", 1);
}
function _wordwrap( $str, $width, $break="\n") {
$formatted = '';
$position = -1;
$prev_position = 0;
$last_line = -1;
/// looping the string stop at each space