Проблемы с check_plain

Опубликовано 2014.06.17

Иногда при работе с сайтом вываливаются подобного рода ошибки:
Warning: htmlspecialchars(): Invalid multibyte sequence in argument в функции check_plain() (строка 1566 в файле /includes/bootstrap.inc).
Это возникает из-за того, что в функцию
  1. htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
передана строка в кодировке, отличной от UTF-8. Это может быть сторонний модуль, написанный в другой кодировке или ваш собственный шаблон или что-либо ещё. Проблема существует давно и решений у неё множество. Самое плохое - это использовать подавление ошибки, я даже не буду показывать как это делается. Оптимальный вариант выглядит так:
  1. function check_plain($text) {
  2. if (drupal_validate_utf8($text)) {
  3. return htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
  4. }
  5. return htmlspecialchars($text, ENT_QUOTES);
  6. }
То есть, если строка в кодировке UTF-8 - функция отработает так, как в ней это заложено. А если кодировка другая - сработает последняя строчка функции check_plain. То есть check_plain отработается корректно при любой кодировке.