Результат SQL не английские символы

Я всегда работаю с MySQL, но сейчас я вынужден работать с SQL, и я потерялся. Я просто хочу потренироваться на испанском и не могу заставить его работать. Вот код, надеюсь, все имеет смысл.

$connection = odbc_connect("Driver = {SQL Server Native Client 11.0};Server=$server;Database=$database;", $user, $password);
$sql = "SELECT * FROM my_table";
$res=odbc_exec($connection,$sql)or die(exit("Error en odbc_exec"));
while($arr = odbc_fetch_array($res)) {
    $var = $arr["OkRef"];
    echo "1.- ".iconv("Windows-1256", "UTF-8", "$var")."<br />";
    echo "2.- ".iconv("CP437", "UTF-8", $var)."<br />";
    echo "3.- ".iconv("CP850", "UTF-8", $var)."<br />";
    echo "4.- ".utf8_decode($arr["OkRef"])."<br />";
    echo "5.- ".utf8_encode($arr["OkRef"])."<br />";
    echo "6.- ".$arr["OkRef"]."<br />";
    echo "7.- ".mb_convert_encoding($arr["OkRef"], "utf-8", "windows-1251")."<br />";
    echo "8.- ".htmlspecialchars( iconv("iso-8859-1", "utf-8", $var) );
    }
}

Получаю вот что:

1.- ér àçHه¬´§d_meta_packet1Y³§0ت.122) ¸ؤ

2.- Θr ατHσ¼┤ºd_meta_packet1Y│º0╩.122) ╕─

3.- Úr ÓþHÕ¼┤ºd_meta_packet1Y│º0╩.122) ©─

4.- ?r ??H????d_meta_packet1Y??0?.122) ??

5.- ér àçH嬴§d_meta_packet1Y³§0Ê.122) ¸Ä

6.- �r ��H����d_meta_packet1Y��0�.122) ��

7.- йr азH嬴§d_meta_packet1Yі§0К.122) ёД

8.- ér àçH嬴§d_meta_packet1Y³§0Ê.122) ¸Ä

Я также попытался добавить следующее (не сразу, очевидно), чтобы он работал как есть:

<meta http-equiv = "content-type" content = "text/html; charset=UTF-8">
<meta http-equiv = "Content-Type" content = "text/html; charset=iso-8859-1" />
header('Content-Type: text/html;charset=utf-8');
header('Content-Type: text/html;charset=iso-8859-1');
ini_set('mssql.charset', 'UTF-8');

Сервер - это Microsoft SQL Server Enterprise Edition, а параметры сортировки сервера - Modern_Spanish_CI_AS.

Вы читали UTF-8 на всем пути? - То есть вы уверены, что проблема не в настройках символов PHP или HTML?

Martin 27.04.2018 20:33

Мартин, большое спасибо за ответ. Я не совсем уверен. Как я уже писал внизу, единственное, что я пробовал, - это изменить заголовок с помощью метатега, а затем заголовок с помощью PHP. Также я попытался установить соединение с de DB как charset = "utf-8" и ISO, но это почти все. Я пытаюсь угадать, если честно.

fauvent 27.04.2018 20:47

Я также пробовал соединение таким образом: $ connection = odbc_connect ("Driver = {SQL Server Native Client 11.0}; Server = $ server; Database = $ database; Server_CSet = Modern_S‌ panish_CI_AS; Client_CSet = Windows-1251;", $ user , $ пароль);

fauvent 27.04.2018 20:49

Любое предложение будет высоко оценено!

fauvent 27.04.2018 20:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
274
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я знаю, что этот ответ опубликован слишком поздно, но сейчас я в похожей ситуации, поэтому хочу поделиться своим опытом. Моя конфигурация почти такая же - столбцы базы данных и таблицы с сопоставлением Cyrillic_General_CS_AS. Обратите внимание, что я использую драйвер PHP для SQL Server, а не встроенную поддержку ODBC.

Следующие шаги помогли мне разрешить мой случай. Я использовал сопоставление из вашего примера.

База данных:

CREATE TABLE [dbo].[MyTable] (
    [TextInSpanish] [varchar](50) COLLATE Modern_Spanish_CI_AS NULL,
    [NTextInSpanish] [nvarchar](50) COLLATE Modern_Spanish_CI_AS NULL
)


INSERT [dbo].[MyTable] (TextInSpanish, NTextInSpanish) 
VALUES ('Algunas palabras en español', N'Algunas palabras en español')

PHP:

Установите default_charset = "UTF-8" в свой файл php.ini. Кодируйте исходные файлы в UTF-8. Я использую Notepad ++ для этого шага.

Прочитать данные из базы данных:

  • С кодировкой соединения по умолчанию. Для чтения данных из базы данных используйте $data = iconv('CP1252', 'UTF-8', $data);. Обратите внимание, что по умолчанию данные возвращаются в виде 8-битных символов, как указано в коде. страница локали Windows, установленной в системе. Любой многобайтовые символы или символы, которые не отображаются в эта кодовая страница заменяется однобайтовым вопросом знак (?) символ. Это кодировка по умолчанию.
  • С кодировкой соединения UTF-8. Столбец должен иметь тип nchar или nvarchar.

HTML:

Использование: <meta http-equiv = "Content-Type" content = "text/html; charset=utf-8">

Рабочий пример:

test.php (PHP 7.1, драйвер PHP для SQL Server 4.3, файл test.php в кодировке UTF-8):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
    <head>
    <meta http-equiv = "X-UA-Compatible" content = "IE=edge"/>
    <meta charset = "utf-8">

<?php
// Connection settings
$server = '127.0.0.1\instance,port';
$database = 'database';
$user = 'username';
$password = 'password';
$cinfo = array(
    "CharacterSet"=>SQLSRV_ENC_CHAR,
    #"CharacterSet"=>"UTF-8",
    "Database"=>$database,
    "UID"=>$user,
    "PWD"=>$password
);
$conn = sqlsrv_connect($server, $cinfo);
if ($conn === false)
{
    echo "Error (sqlsrv_connect): ".print_r(sqlsrv_errors(), true);
    exit;
}

// Query
$sql = "SELECT * FROM MyTable";
$res = sqlsrv_query($conn, $sql);
if ($res === false) {
    echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
    exit;
}

// Results
while ($arr = sqlsrv_fetch_array($res, SQLSRV_FETCH_ASSOC)) {
    # Use next 2 lines with "CharacterSet"=>SQLSRV_ENC_CHAR connection setting
    echo iconv('CP1252', 'UTF-8', $arr['TextInSpanish'])."</br>";
    echo iconv('CP1252', 'UTF-8', $arr['NTextInSpanish'])."</br>";
    # Use next 2 lines with "CharacterSet"=>"UTF-8" connection setting
    #echo $arr['TextInSpanish']."</br>";
    #echo $arr['NTextInSpanish']."</br>";
}

// End
sqlsrv_free_stmt($res);
sqlsrv_close($conn);
?>

    </head>
    <body></body>
</html>

Спасибо за обмен вашего опыта! Никогда не поздно! ;)

fauvent 06.01.2019 15:31

Другие вопросы по теме