Как поменять кодировку из ACII в UTF-8?

Ссылка скопирована
1 ответ
<?php     $db = new yiidbConnection([     'dsn' => 'dblib:host=192.111.11.114;dbname=name',     'username' => 'us',     'password' => 'pas',     'charset' => 'utf8',                          ]);                    $result = $db->createCommand("EXECUTE get :prod")               ->bindValue(':prod_sn',$SN)               ->queryAll();      ?>

<?php $db = new yiidbConnection([ 'dsn' => 'dblib:host=192.111.11.114;dbname=name', 'username' => 'us', 'password' => 'pas', 'charset' => 'utf8', ]); $result = $db->createCommand("EXECUTE get :prod") ->bindValue(':prod_sn',$SN) ->queryAll(); ?>

/

echo mb_detect_encoding($result[$i]);
здесь говорит что кодировка ASCII

mb_convert_encoding($result[$i], "ASCII", "UTF-8");

mb_convert_encoding($result[$i], "ASCII", "UTF-8");

Кодировку после этого не меняет

Подскажите где туплю?
Все русские символы из бд приходят знаками вопроса

Дополнительно:

Ответы:

В кодировке ASCII (American standard code for information interchange) нет и никогда не было кириллицы. У вас, скорее всего, cp1251.

  • Данные приходят вперемешку русские и английские слова.
    но почему тогда echo mb_detect_encoding($res[$i]); показывает ASCII?
    Перекодировка из cp1251 в UTF8 не помогла
  • petr_reznikov, если БД таки на виндовской кодировке cp1251, а вы тянете из нее информацию, указав в соединении utf-8 - в этой информации вся кириллица могла превратиться в знаки вопроса. mb_detect_encoding видит, что в тексте только символы в кодировке ASCII, и честно об этом рассказывает.
  • Adamos, Понял, тогда какую кодировку стоит указать при подключении к бд?
  • petr_reznikov, вы запутались сами и запутали отвечающих.
    Ваша проблема - в строчке mb_detect_encoding($result[$i]);
    Выведите print_r($result[$i]) и посмотрите, что вы передаете в функцию вместо строки.
  • Adamos, 0_о передаётся строка
  • petr_reznikov, queryAll возвращает массив записей, каждая из которых - массив полей. $result[$i] должно быть массивом, если вы не выкинули из вопроса переопределение переменной.
  • Adamos, так и есть, в переменной обычная строка, которую вытащил из массива. Просто чтобы не захламлять не стал всё прописывать. к вопросу это значения не имеет
  • petr_reznikov, браво, вы, ловко сократив вопрос, обманули следователя, детектор лжи и идущих по следу адских гончих. Теперь можно разбираться, что у вас все-таки с базой.

    Все русские символы из бд приходят знаками вопроса

    Внезапно, mb_detect_encoding('????') таки выдаст ASCII, и это будет правдой. Но никакого отношения к базе это не имеет. Определяйте настоящую кодировку базы и указывайте ее в настройках подключения. Без этого никакие манипуляции в дальнейшем РНР вам ничего не дадут.

  • Adamos, ок, спасибо
  • Adamos, В базе кодировка ANSI
    Но прописывая
    'charset' => 'windows-1251',
    не помогает
  • petr_reznikov, ANSI / ASCII - это древняя американская кодировка на 128 символов, с которых сейчас начинаются все остальные. Кириллицы в ней НЕТ.
    Поэтому у вашей базы НИКАК не может быть такой кодировки.
  • Adamos, ANSI это не то же что ASCII, в Windows так принято называть 8-битные Windows-кодировки, т.е. если кириллица выбрана как язык, то ANSI-кодировкой будет Windows-1251, OEM-кодировкой cp866. Можно попробовать системный язык установить в кириллицу.
  • Владимир Дубровин, M$ славится своей собственной терминологией.
    Но собственно аббревиатура ANSI кодировкой быть никак не может.
  • Adamos, 8 битные кодировки и их стандартизация это вообще страдание, к счастью почти вымершее. Это старая история https://en.wikipedia.org/wiki/Windows_code_page#AN... - на тот момент стандартов на 8-битные кодировки просто не существовало. Сначала планировалась совместимость с разрабатываемым стандартом ANSI и API декодирования (например) назвали типа OemToAnsi. Потом ANSI отказалась от стандартизации 8-битных кодировок и методы переименовали (в OemToChar например), но старое название прижилось, потому что ISO в итоге стандартизировало другие кодировки и в итоге оказалось на N пропиетарных стандартов больше
  • Владимир Дубровин, а теперь винды бережно хранят весь этот мусор ради совместимости. Да, старая история.
    Но, возвращаясь к вопросу ТС - у него все-таки, скорее всего, либо UTF-8, либо CP1251. Просто потому, что в вебе крайне редко используется что-то другое.
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Кирилл JS Ответ

Для изменения кодировки из ASCII в UTF-8 в PHP можно воспользоваться функцией iconv. Эта функция позволяет конвертировать строку из одной кодировки в другую. Для выполнения данной операции необходимо указать исходную кодировку (ASCII) и целевую кодировку (UTF-8).

Пример кода:

$asciiString = "Пример текста в ASCII";
$utf8String = iconv('ASCII', 'UTF-8', $asciiString);
echo $utf8String;

$asciiString = "Пример текста в ASCII"; $utf8String = iconv('ASCII', 'UTF-8', $asciiString); echo $utf8String;

В данном примере мы задаем исходную кодировку 'ASCII', целевую кодировку 'UTF-8' и преобразуем строку $asciiString в UTF-8. После этого выводим полученную строку $utf8String.

Если требуется изменить кодировку не только для строки, но и для всего файла, можно воспользоваться функцией mb_convert_encoding. Эта функция выполняет преобразование кодировки для всего текстового файла.

Пример использования mb_convert_encoding:

$fileContent = file_get_contents('example.txt');
$utf8Content = mb_convert_encoding($fileContent, 'UTF-8', 'ASCII');
file_put_contents('example_utf8.txt', $utf8Content);

$fileContent = file_get_contents('example.txt'); $utf8Content = mb_convert_encoding($fileContent, 'UTF-8', 'ASCII'); file_put_contents('example_utf8.txt', $utf8Content);

В этом примере мы считываем содержимое файла 'example.txt', преобразуем его кодировку из ASCII в UTF-8 с помощью функции mb_convert_encoding, и записываем результат обратно в файл 'example_utf8.txt'.

Таким образом, используя функции iconv и mb_convert_encoding, можно легко изменить кодировку из ASCII в UTF-8 как для строк, так и для текстовых файлов в PHP.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно