OldEr'S Blog

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

Связано с категорией: PHP Нет комментариев

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

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

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

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

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

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

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

Связано с категорией: MySQL, PHP, vBulletin Читать полностью

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

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

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

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

Связано с категорией: vBulletin Нет комментариев

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

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

п»ї

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

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

Связано с категорией: PHP, Web Нет комментариев

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);
}
}

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

Связано с категорией: MySQL, vBulletin Нет комментариев

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

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

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

UPDATE forum
SET daysprune = -1

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

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

Связано с категорией: vBulletin 1 комментарий

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

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

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

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

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

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


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

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

Связано с категорией: vBulletin Нет комментариев

Ссылки и 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-дневной давности.
Нашли? Тогда поехали.