htmlspecialchars() в PHP >= 5.4.0

Как известно, у функции htmlspecialchars() есть необязательный параметр $encoding, которым определяется кодировка преобразуемой строки. До версии PHP 5.4.0 значением по умолчанию данного параметра была кодировка «ISO-8859-1«, после 5.4.0 кодировкой по умолчанию стала UTF-8. Таким образом, вызывая функцию как htmlspecialchars($str), где $str — строка в кодировке отличной от UTF-8 (например windows-1251), имеем на выходе пустую строку. Чтобы разрешить данную ситуацию, необходимо указать кодировку передаваемой строки при вызове функции, например вот так:

$str = htmlspecialchars($str, ENT_COMPAT, ‘cp1251’);

Документация: http://php.net/manual/ru/function.htmlspecialchars.php

Установка Memcached PHP под Windows

Понадобилось установить memcached на локалку специально для некого громоздкого скрипта, который без вышеупомянутого модуля работать не умеет.
Процедура не обошлась без половых актов — спешу поделиться впечатлениями. = )

P.S Гугл выдает достаточно заметок на эту тему, но обнаруживается ряд ньансов, о которых расскажу подобнее.
Читать далее Установка Memcached PHP под Windows

Белые или пустые страницы

Перевод статьи о причинах возникновения «белых» страниц вместо страниц форума с vbulletin.com:

Известные причины появления пустых или «белых» страниц:

1. Вы неправильно загрузили файлы vBulletin. Заново загрузите все файлы vBulletin (кроме изображений) и убедитесь в том, что вы загрузили их в ASCII формате, а также в том, что вы перезаписали старые файлы. Убедитесь в том, что вы загрузили файлы «Панели администратора», в каталог панели администратора(admincp), которая указанна в config.php. Далее, если у вас есть доступ в «Панель Администратора», запустите «Подозрительные версии файлов» в «Диагностике», чтобы убедиться в том, что загружены все файлы, соответствующие Вашей версии форума:
Читать далее Белые или пустые страницы

Амперсанд в названиях разделов

Проблема: при использовании знака «&» (амперсанд) в названиях разделов форума возникает ошибка валидатора. (validator.w3.org)

Решение: создаем новый модуль (Админка — Продукты и модули — Управление модулями — Добавить модуль)

Продукт — vBulletin
Местоположение модуля — forumbit_display
Заголовок — Ampersand Fix
Порядок выполнения — 5
Код PHP модуля$forum[title] = htmlspecialchars($forum[title]);
Модуль включен — Да

Набор символов п»ї вверху страницы

Бывает, что после каких-либо манипуляций с сайтом, будь-то одностраничный сайт или движок с набором php-скриптов, вверху странички, или страничек, появляются загадочные символы

п»ї

Происходит это из-за того, что какой-либо скрипт(ы) был сохранен в кодировке UTF-8 с BOM (Byte Order Mark), то есть с цифровой подписью, и эта подпись обрабатывается интерпретатором PHP, что и вызывает ошибку. Чтобы избавиться от этой проблемы нужно пересохранить скрипт(ы) без BOM. Если страничка одна, или не имеет includ`ов, то задача, разуммется, тривиальна. Но если речь идёт о серьезном движке, где достаточно много скриптов, которые, к тому же, еще и содержат includ`ы, то ручной перебор слишком утомителен. К счастью, для этих целей есть маленькая утилита bom-remover, которую можно использовать для поиска файлов сохраннёных с BOM и удаления цифровой подписи.

Но я бы рекомендовал пересохранять скрипты самостоятельно с помощью текстового редактора EmEditor.
Все что требуется от нас, это указать каталог, задать маску (по желанию) и нажать кнопку «Найти» и всё.
Ах да, и сказать большое спасибо автору программы. = )

Xenforo и кодировка при конвертации

Конвертировал vBulletin в Xenforo и столкнулся с проблемой, что даже при указании явной кодировки utf-8 при импорте, и корректном хранении всех данных vBulletin в utf-8, всё равно получаем кракозябры после импорта. После недолгих поисков в одном из скриптов импортера, а именно library/XenForo/Importer/Abstract.php была найдена функция _convertToUtf8, которая все импортируемые данные «насильно» пытается конвертировать в utf-8, чем и вызывает вышеупомянутую проблему. Следовательно, отучаем её это делать. = )

Из файла library/XenForo/Importer/Abstract.php вырезаем следующий кусочек кода:

// note: assumes charset is ascii compatible
if (preg_match(‘/[\x80-\xff]/’, $string))
{
if (function_exists(‘iconv’))
{
$string = @iconv($this->_charset, ‘utf-8//IGNORE’, $string);
}
else if (function_exists(‘mb_convert_encoding’))
{
$string = mb_convert_encoding($string, ‘utf-8’, $this->_charset);
}
}

и сохраняем. Повторяем процесс импорта.

Отображение всех тем по умолчанию

Задача: установить способ отображения тем «Отображать все темы» сразу во всех разделах.

Решение: Выполняем следующий SQL-запрос (Админка — Обслуживание — Выполнить SQL запрос):

UPDATE forum
SET daysprune = -1

и Перестраиваем информацию о разделах. (Админка — Обслуживание — Обновление счётчиков — Перестроить информацию о разделах)

P.S Не забывайте указывать префикс таблиц, если он используется.

Как отключить рейтинг тем

Задача: полностью отключить возможность оценивать темы на форуме.

Решение: Выполняем следующий SQL-запрос (Админка — Обслуживание — Выполнить SQL запрос):

UPDATE forum
SET options = options - 2048
WHERE options & 2048

и Перестраиваем информацию о разделах. (Админка — Обслуживание — Обновление счётчиков — Перестроить информацию о разделах)

Примечание: Чтобы обратно включить возможность оценивать темы, необходимо повторить те же действия, только со следующим запросом:

UPDATE forum
SET options=options + 2048
WHERE NOT(options & 2048);

P.S Не забывайте указывать префикс таблиц, если он используется.

Ссылки и BBCode [CODE]

Задача: Сделать так, чтобы ссылки внутри ббкода [CODE] были «кликабильными».

Реализация: Открываем файл includes/functions_newpost.php, находим:

function convert_url_to_bbcode($messagetext)
{
global $vbulletin;

и ниже добавляем:

$messagetext = str_replace(array(‘[CODE]’, ‘[/CODE]’), array(‘[QUOTE]’, ‘[/QUOTE]’), $messagetext);

Всё.

P.S: Если небходимо, то можно также добавить в массив для поиска и замены ббкоды написанные в нижнем регистре.

Восстановление темы/сообщения/пользователя.

Порой возникает необходимость восстановить какую-либо тему, сообщение или пользователя, после того, как кто-то их, случайно (или не случайно:)) удалил. Для этого нам понадобится дамп нашей БД n-дневной давности.
Нашли? Тогда поехали.
Читать далее Восстановление темы/сообщения/пользователя.