Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SQL Server Driver for PHP и юникод 
V
    Опции темы
href
Дата 5.8.2008, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 25.10.2006
Где: Moscow

Репутация: нет
Всего: нет



 smile Пытаюсь заюзать  SQL Server Driver for PHP, чтобы решить проблему с выводов разных "хитрых" символов в юникоде. Вроде, всё как в примере, а вместо vojaĝo выводит иероглифы: 瘀漀樀愀ᴁ漀. Что не так?

Код

<?
define("_CHARSET","utf-8");

echo "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset="._CHARSET."\">\n";

    $connectionInfo = array("UID" => $userName, "PWD" => $password, "Database"=>"avengo"); 
    $serverName = $hostName;    
    $conn = sqlsrv_connect($serverName, $connectionInfo);

    if( $conn ) {
        echo "Connection established.\n";
    } else {
            echo "Connection could not be established.\n";
            die( print_r( sqlsrv_errors(), true));
        }
    
    $reviewID = 4;
    $comments = utf8_encode("[Insert comment here.]");
    $comments = iconv("utf-8", "utf-16", $comments);

    $params1 = array(
                  array($comments,
                        null,
                        SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_BINARY)),
                  array($reviewID, null)
                );


    $tsql = "select FirstName from users where uniid='80FB0BC3-04CA-4CD1-B0D5-07FDD6A88742'";    
    $stmt2    =    sqlsrv_query($conn, $tsql, $params1);        
    
if( sqlsrv_fetch($stmt2) )
{
    echo "Comments: ";
    $data = sqlsrv_get_field($stmt2, 
                             0, 
                             SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_BINARY));
    $data = iconv("utf-16", "utf-8", $data);    
    echo $data."<br>";
}
else
{
     echo "Error in fetching data.<br>";
     die( print_r( sqlsrv_errors(), true));
}

    sqlsrv_free_stmt( $stmt2 );    
    sqlsrv_close($conn);
?>


PM MAIL WWW ICQ Skype GTalk   Вверх
href
Дата 5.8.2008, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 25.10.2006
Где: Moscow

Репутация: нет
Всего: нет



вопрос, видимо, сводится к работе с iconv и тому, как из v�o�j�a�o� получить vojaĝo.
PM MAIL WWW ICQ Skype GTalk   Вверх
sTa1kEr
Дата 5.8.2008, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Никогда не использовал этот драйвер в PHP, но насколько я понимаю эту строчку
Цитата(href @  5.8.2008,  17:12 Найти цитируемый пост)
37:                             SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_BINARY));

Это говорит MSSQL-у получать данные в виде массива байт, т.е. в бинарном виде. Соответственно и конвертировать надо данные не из utf-8 в utf-16, а из byte в utf-8.
PM MAIL   Вверх
href
Дата 6.8.2008, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 25.10.2006
Где: Moscow

Репутация: нет
Всего: нет



Так. Туплю: а каким образом я могу конвертировать из byte в utf-8? через iconv? 
PM MAIL WWW ICQ Skype GTalk   Вверх
sTa1kEr
Дата 7.8.2008, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(href @  6.8.2008,  10:52 Найти цитируемый пост)
Так. Туплю: а каким образом я могу конвертировать из byte в utf-8? через iconv?  

Я не внимательно посмотрел, похоже все правильно с iconv-ом, видимо надо разбиратся с сами драйвером.

Добавлено через 10 минут и 8 секунд
В крайнем случае, как вариант можно конвертировать данные в 8и битную кодировку на самом сервере и при получиении использовать SQLSRV_ENC_CHAR вместо SQLSRV_ENC_BINARY.
PM MAIL   Вверх
href
Дата 27.8.2008, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 25.10.2006
Где: Moscow

Репутация: нет
Всего: нет



Решение проблемы подсказали на форуме по SQL Server Driver for PHP:
http://forums.microsoft.com/msdn/ShowPost....;postid=3779431

Если вместо UTF-16 указывать UCS-2LE — всё работает  smile  
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0537 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.