Здравствуйте товарищи, меня это ошибка давно волновала, теперь окончательно запутался, и не знаю пути выхода.
Что имею, имею Drupal 7.14, абсолютно голый - только что развернул, ничего абсолютно не делал.
Опыт первый: в типе материала по умолчанию Article, добавляю поле File (filefield). После чего создаю материал типа Article и добавляю в него файл под названием "Это файл ридми.txt", материал сохраняю и он мне его показывает, навожу на ссылку файла пишет ссылку: .../sites/default/files/Это файл ридми.txt. Если щёлкаю по нему, то:
Warning: htmlspecialchars() [function.htmlspecialchars]: Invalid multibyte sequence in argument in check_plain() (line 1572 of D:\wwwroot\WorkSite\uio\includes\bootstrap.inc).
PDOException: in dblog_watchdog() (line 154 of D:\wwwroot\WorkSite\uio\modules\dblog\dblog.module).
Захожу по тому пути, в поиске того файла, а он с ужасным именем: P-C,Ps C,,P°P№P» CЂPёPгPjPё.
Т.е. при заливке файла, он каким то образом коверкает его название.
Опыт второй: Пытаюсь найти русское слово: "Привет". Всплывает аналогичная ошибка.
Решил устнановить на сайте русский ещё язык, через админку поставил модули Locale и Content Translation, после чего просто добавил Russian.
Повторил опыты выше, тепере че, Internet Explorer стал писать вообще ошибку 500, а Firefox: PHP Fatal Error: Exception thrown without a stack frame in Unknown on line 0
Пошёл дальше, импортировал русский перевод 7.13 версии, перевелось примерно на 90%.
Повторил опыт выше, снова теже ошибки:
Warning: htmlspecialchars() [function.htmlspecialchars]: Invalid multibyte sequence in argument in check_plain() (line 1572 of D:\wwwroot\WorkSite\uio\includes\bootstrap.inc).
PDOException: in dblog_watchdog() (line 154 of D:\wwwroot\WorkSite\uio\modules\dblog\dblog.module).
Данным постом хочу обобщить эту проблемму для многих и уже точно найти ответы, и попробовать их в действии, тем самым найти одно верное решение.
В чём может быть проблемма, слышал есть решение про изменение bootstrap.inc, там что с UTF8, но это ядро изменяется, и то вроде у меня это не помогло, какие ещё есть решения?
Спасибо всем заранее, за то что прочитали.
Комментарии
попробуйте в файле .htaccess добавить строку:
AddDefaultCharset UTF-8
ещё неплохо было бы поставить http://drupal.org/project/transliteration
с транслит это в принципе да, по принципу не маяться, поставить да и всё Спасибо.
Но всё же, основной вопрос это с поиском, я завтра попробую по вашему совету с AddDefaultCharset UTF, отпишусь, Спасибо!
AddDefaultCharset UTF-8 не помогло
Развернул всё аналогично на Linux сервере - всё идеально работает :/ В чём дело?
Присоединяюсь к пользователю andreystrelkov.
У меня ситуация следующая:
сайт на 3 языках (рус,укр,англ), Друпал 7
При использовании стандартного поиска друпала (например http://exprint.in.ua/ru/search/node/%D0%91%D0%B0%D0%B3%D0%B0%D1%82%D0%BE%D1%84%D1%83%D0%BD%D0%BA%D1%86%D1%96%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%B8%D0%B9%20%D0%BF%D1%80%D0%B8%D1%81%D1%82%D1%80%D1%96%D0%B9%20Canon%20PIXMA%20MG6240 выдает ошибку
PDOException: в функции dblog_watchdog() (строка 154 в файле /home/ofis/exprint.in.ua/www/modules/dblog/dblog.module).
А вот например при поиске того же материала, но только на англ. языке http://exprint.in.ua/en/search/node/%D0%91%D0%B0%D0%B3%D0%B0%D1%82%D0%BE%D1%84%D1%83%D0%BD%D0%BA%D1%86%D1%96%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%B8%D0%B9%20%D0%BF%D1%80%D0%B8%D1%81%D1%82%D1%80%D1%96%D0%B9%20Canon%20PIXMA%20MG6240 все нормально работает
Ошибка появляется при поиске отдельных материалов, а так в целом поиск работает нормально, но ведь это не хорошо.
Вобшем помогите кто в теме.
Ндааа ... как я вижу помощи ждать не от кого, как гритса "спасение утопающего дело рук самого утопающего"
Вобшем проблему я решил следующим образом, открываю в редакторе файл modules\dblog\dblog.module ... ищу линию 154, которая соответствует ф-и dblog_watchdog ... ->execute();
function dblog_watchdog(array $log_entry) {
Database::getConnection('default', 'default')->insert('watchdog')
->fields(array(
'uid' => $log_entry['uid'],
'type' => substr($log_entry['type'], 0, 64),
'message' => $log_entry['message'],
'variables' => serialize($log_entry['variables']),
'severity' => $log_entry['severity'],
'link' => substr($log_entry['link'], 0, 255),
'location' => $log_entry['request_uri'],
'referer' => $log_entry['referer'],
'hostname' => substr($log_entry['ip'], 0, 128),
'timestamp' => $log_entry['timestamp'],
))
->execute();
}
начинаю выводить аргумент ф-и $log_entry с помощью dsm() http://awesomescreenshot.com/093a507a0 ... и замечаю, что элемент массива $...['link'] в моем случае, имеет длину больше чем 255, и с чего делаю предположение, что скорее всего в следствии принудительного обрезания $...['link'], идет попытка вставки ссылки/тега с незакрытыми кавычками атрибутов (типа title), в таблицу watchdog в поле link, из за чего скорее всего и возникает ошибка.
Поэтому делаю следующее:
меняю строку в ф-и dblog_watchdog
'link' => substr($log_entry['link'], 0, 255),
на
'link' => substr($log_entry['link'], 0, 450), // Тут конечно по вкусу ...
и не забываем в таблице watchdog, сменить длину поля link до 450
Вот собственно и все!
П.С. Да я понимаю, что при обновлении ядра, это придется делать заново, НО будем надеяться, что в новой версии это учтут.
На самом деле кириллица в UTF-8 двухбайтная и при применении substr($log_entry['link'],0,255); в некоторых случаях отсекается второй байт и символ оказывается не UTF-8.
Если не хочется править схему БД, то можно провести такой хак:
Заменить в функции dblog_watchdog строку
на
Отправил https://drupal.org/node/2039527, но он не прошел автоматическое тестирование. Кто-то хочет довести дело до конца?
Спасение утопающих нереально без указания ошибки, до редактирования в вашем посте было только про PDO Exeption, так что гребите сами
Так ведь гребти то дальше, не куда, приплили батенька ) ... или выгребли, САМИ заметьте.
А если серьёзно, то Вам и той информации которую я оставил в первом своем посте
Друпал 7,
PDOException: в функции dblog_watchdog() (строка 154 в файле /home/ofis/exprint.in.ua/www/modules/dblog/dblog.module).
вполне достаточно,чтобы начать шевелить мозгами, переспросить у меня, и в результате прийти к решению данной проблемы САМОМУ ... Я ВЕДЬ СМОГ.
Херасе предьява, у вас проблема, а я вас переспрашивать должен, так вам гребсти в одиночестве придётся.
У PDOException есть номер ошибки есличо
А где посмотреть номер ошибки PDOException?
Виндовый сервак. Надо установить транслитерацию синонимов.
это как я недавно узнал - похоже на не совместительство IIS 7.5 c UTF8 - и типа есть фикс для этого
Удалось ли доплыть? у меня версия 7.22 выдаёт:
PDOException: SQLSTATE[IMSSP]: An error occurred translating string for input param 7 to UCS-2: No mapping for the Unicode character exists in the target multi-byte code page. в функции dblog_watchdog() (строка 160 в файле C:\inetpub\wwwroot\modules\dblog\dblog.module).
попробовал заменить строку, но изменений не узрел.
Добавление...
обнаружил, что при отключении чистых ссылок эта ошибка не появляется, но и в поиске по 0, хотя я набирал слова, которые есть на сайте...
есть мысли, как поправить модуль чистых ссылок и что делать с поиском?
Нет, я ничего больше не делал. Патч проверял под Linux с включенными чистыми ссылками.
Но UCS-2 - это не UTF-8.
Добрый день.
Столкнулся с проблемой появления ошибки
PDOException: in dblog_watchdog()
.Проявляется она у меня при выполнении поискового запроса содержащего кириллицу.
http://drupal7.local/search/node/какойтотекст
Проявляется в среде Windows+Drupal7+IIS 7. На Windows+Drupal 7+Apache поиск отрабатывает корректно.
Решение (файл bootstrap.inc, функция watchdog):
<?php
--- /includes/bootstrap.inc Mon Jan 06 15:56:26 2014
+++ /includes/bootstrap.inc Mon Jan 06 15:53:45 2014
@@ -1723,7 +1723,7 @@
'link' => $link,
'user' => $user,
'uid' => $user_uid,
- 'request_uri' => $base_root . request_uri(),
+ 'request_uri' => urlencode($base_root . request_uri()),
'referer' => isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '',
'ip' => ip_address(),
// Request time isn't accurate for long processes, use time() instead.
?>
P.S. Ну и после каждого обновления редактировать
Фигасе, и как, всё ок, всё решилось?
Я мы IIS патчили официальным патчем
Фигасе! И как - помогло?
Да. Правда я это сам нашёл ещё месяца полтора назад. И по этой причине не перехожу на 7.23
Патч для IIS годится только для Drupal менее, чем 7.23? Не совсем понял Ваше сообщение.
Я ошибку обнаружил еще на Drupal... не помню какой, где-то в августе. Осенью вот нашел как можно исправить в bootstrap.inc. Потом обновил Drupal и забыл где и что менял.:)
Вот опять вспомнил и решил написать, чтобы было где найти:) Сейчас Drupal 7.25.
нет, просто обновлять лень, т.к. помимо этого косяка есть ещё косяк вебверстальщика, который тему верстал, в итоге тег float: отрабатывает криво, а он в куче файлов. После обновления придётся много ручками работать. До лета точно трогать ничего не буду.
Помнится мне вот этим патчем всё решилось http://support.microsoft.com/kb/2277918
У меня тоже были эти ошибки при попытке сохранить ноду
PDOException: in dblog_watchdog() (line 154 of D:\wwwroot\WorkSite\uio\modules\dblog\dblog.module)
Оказалось, что проблема в том, что у меня стоял pathauto, и он автоматически делал мой url слишком длинным, и кривой друпал его не запоминал.
То есть у меня был автоматический url /content/инвестор-вася-пытается-свести-счеты-с-жизнью, на нем выдавалась ошибка, я его заменил на /content/инвестор-вася-пытается и все стало нормально.
Вот ука этот друпал!
И еще какая
function dblog_watchdog(array $log_entry) {
Database::getConnection('default', 'default')->insert('watchdog')
->fields(array(
'uid' => $log_entry['uid'],
'type' => drupal_substr($log_entry['type'], 0, 64),
'message' => $log_entry['message'],
'variables' => serialize($log_entry['variables']),
'severity' => $log_entry['severity'],
'link' => drupal_substr($log_entry['link'], 0, 255),
'location' => $log_entry['request_uri'],
'referer' => $log_entry['referer'],
'hostname' => drupal_substr($log_entry['ip'], 0, 128),
'timestamp' => $log_entry['timestamp'],
))
->execute();
}
Вместо substr() используем drupal_substr().
Код для Drupal 7.
у меня такая ошибка была, я изменил
'link' => drupal_substr($log_entry['link'], 0, 255)
на
'link' => drupal_substr($log_entry['link'], 0, 511)
и потом через phpmyadmin в таблице watchdog длину поля link с 255 до 511 увеличил
надо заменить старый код функции более подробно http://www.drupal.ru/node/129677