2011-01-17 3 views
0

Я пытаюсь записать следующую строку в базу данных:Проблемы с кодировкой/декодированием/вставкой символов с французским акцентом

Звук решетки муара эффект при печати.

Характер «é» вызывает у меня массированную головную боль. Я не могу использовать htmlentities, потому что база данных является частью настольного приложения. Мой HTML - UTF-8.

В течение моей (5 дней и подсчета) попыток отладки этой проблемы я вставлял ту же строку в базу данных с помощью приложения для настольных компьютеров, которое, казалось, прекрасно работало, за исключением того, что оскорбительный символ отображается как «?» - даже используя htmlentities или utf8_encode.

Эти сообщения об ошибках, которые я получаю при попытке вставить строку:

Предупреждение: PDOStatement :: Execute() [pdostatement.execute]: сообщение: незавершенная кавычку перед строкой символов «решетка динамиков муар. (Тяжесть 15)

Предупреждение: PDOStatement :: Execute() [pdostatement.execute]: Общая ошибка SQL Server: Проверка сообщений с SQL Server (Тяжесть 15)

Предупреждение: PDOStatement :: execute() [pdostatement.execute]: сообщение: Строка 1: Неправильный синтаксис рядом с «решеткой громкоговорителей». (серьезность 15)

Пожалуйста, помогите!

Update (2011-01-18)

По-видимому, кодировка символов базы данных SQL_Latin1_General_CP1_CI_AS. Является ли это эквивалентом SQL Server ISO-8859-1? Является ли ISO-8859-1 кодировкой символов по умолчанию PHP?

Update 2 (2011-01-18)

Так близко! В том числе charset=UTF-8 в строке DSN разрешено вставлять символ 'é', и оно отображается правильно в приложении для настольных компьютеров. Он по-прежнему отображается как '?' на веб-странице, хотя, хотя я использую $text_block = htmlentities($text_block, ENT_NOQUOTES, 'UTF-8'); в функции предварительной форматирования.

+1

веб-страницы utf8, дб соединения utf8, дб поле utf8? $ db = new PDO ('dblib: host = your_hostname; dbname = your_db; charset = UTF-8', $ user, $ pass); –

+0

@ Dagon: веб-страница UTF-8, соединение db (сейчас) UTF-8 (спасибо, см. Обновление), но поле базы данных - 'SQL_Latin1_General_CP1_CI_AS'. – Kalessin

+0

можно ли увидеть веб-страницу (url)? –

ответ

1

Не забудьте правильно передать динамические строки, используя привязки PDO, чтобы они были экранированы правильно.

Также убедитесь, что соединение с базой данных также находится в кодировке UTF-8.

Ваши данные в базе данных/полях также должны быть установлены в UTF-8, однако, если они этого не делают, это, вероятно, не приведет к такой ошибке.

+0

Я готовлю оператор, а затем передаю данные как массив, используя $ stmt-> execute ($ data_array). Это нормально? – Kalessin

0

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

- ресивер-решетка муара при печати. if object_id ('tempdb.dbo.#test ') не равно нулю DROP TABLE #test создать TABLE #test (тест NVARCHAR (1000) сличать Latin1_General_CI_AS)

вставки в #test (тест) выберите "решетка динамиков муаровый эффект при печати.

выберите * из #test

+0

У меня нет достаточных привилегий базы данных для запуска этого теста. Однако я обновил свой вопрос с помощью кодировки базы данных. – Kalessin