Создание базы SQLite в UTF-8

gltrinix

Новичок
Здравствуйте!

Зачем мне это надо: В PHP я относительно новичок (относительно, т.к. работаю с другими ЯП), поэтому извините, если буду где-то тупить.

Пишу сервер с результатами игроков для моих игр (aka GameCenter for iOS): сохранение очков и ачивментов игроков в онлайн-базе. Из инструментария пользуюсь связкой Denwer+NetBeans+DenwerPHP5Extensions(SQLite). Для хранения данных использую БД SQLite.

Как я это делаю: Создаю базу следующим образом: $db = sqlite_open( "gamecenter.db" );
Вроде все было в порядке (не считая жесткой привязки денвера к windows-1251 в апаче), но решил добавить игрока с русским именем в базу. На выходе получились кракозябры.

Расследование: Запросом echo sqlite_libencoding(); вывело, что база работает в кодировке iso8859. sqlite_libversion() показал версию 2.8.17.

Вопрос: В доках я нашел, что по умолчанию php компилирует базу в кодировке ISO-8859-1, а как изменить это значение на UTF-8 нигде не указано.

Не могли бы вы мне подсказать как перевести sqlite в UTF-8?
 

gltrinix

Новичок
Нет, в SQLite нет SET NAMES, я пробовал делать PRAGMA encoding = "UTF-8"; при создании таблицы и чтении/записи, но ничего не изменилось.
 

gltrinix

Новичок
Победил. Причем самым удивительным образом.
Делал по примеру, там текст выводился так:
echo htmlentities($row['player']);
Изменил на:
echo $row['player'];

И все заработало. Фантастика. sqlite_libencoding(); по-прежнему выдает iso8859.
Тему можно закрывать.
 

Sufir

Я не волшебник, я только учусь
А если пользователь захочет назвать себя как-то так: <a onmouseover="alert()... ?
 

gltrinix

Новичок
А если пользователь захочет назвать себя как-то так: <a onmouseover="alert()... ?
Тогда, к сожалению, происходит небольшая неприятность... Спасибо за наводку. Может можно от этого другим путем избавиться?
По идее, в моем случае, это не должно вызывать страха - разрешенные символы Aa..Zz, Аа..Яя, 0..9, -.

Идея с ограничением ввода символов возникла, опять же, из-за Game Center. Там можно легко увидеть результаты равные High(longint). Поэтому я не только храню цифры и буквы в строковых переменных, но еще и закодировал их вручную. Они зашифрованы во время игры и во время передачи на сервер.
 

gltrinix

Новичок
weregod, спасибо. Написал htmlentities($row['player'], ENT_COMPAT, "UTF-8"); Все прекрасно заработало.
 
Сверху