wchar_t в файл PHP UTF8

я написал скрипт php, который получает пакеты http POST из программы-клиента windows.

клиент Windows использует «WinHttpClient«для C ++.

WinHttpClient принимает сообщения, которые я отправляю как wchar_t.

проблема в том, что я получаю сообщения в своем PHP-файле, но некоторые знаки, такие как знак «®», отображаются как «Â®».

насколько я знаю, я не могу изменить кодировку моего клиента на utf-8 или что-то в этом роде.
но, может быть, некоторые люди здесь знают, как «преобразовать» широкие символы в utf8, с которым PHP может нормально работать. Потому что я должен сохранить данные в базе данных, которая работает только с utf-8.

Я попробовал это со следующим, но это не меняет это 🙁

function ewchar_to_utf8($matches) {
$ewchar = $matches[1];
$binwchar = hexdec($ewchar);
$wchar = chr(($binwchar >> 8) & 0xFF) . chr(($binwchar) & 0xFF);
return iconv("unicodebig", "utf-8", $wchar);
}

function special_unicode_to_utf8($str) {
return preg_replace_callback("/\\\u([[:xdigit:]]{4})/i", "ewchar_to_utf8", $str);
}

может быть, у вас есть идеи 🙂 Спасибо

0

Решение

проблема в том, что я получаю сообщения в моем PHP-файле, но некоторые
знаки, такие как знак «®», отображаются как «®».

Это означает, что у вас уже есть UTF-8 … неправильно истолкованный в ISO-8859-1 / Windows-1252.

Если это так

<?php

echo $rsymbol; //Comes out as ®

Тогда все что нужно поменять:

<?php
header("Content-Type: text/html; charset=UTF-8");
echo $rsymbol; //Comes out as ®
1

Другие решения

Windows wchar_t — это UTF-16LE, поэтому попробуйте $u8str = iconv('UTF-16LE', 'UTF-8', $input);

Но из того, что я вижу на сайте WinHttpClient, он имеет _b_str класс, так что вы можете преобразовать в байты — он не говорит, если это через UTF-8, но если все остальное не удается, вы можете использовать WideCharToMultiByte () с CP_UTF8 кодовая страница, чтобы получить подходящий байтовый буфер для POST.

3

Это хорошая PHP-функция, используемая для преобразования всей строки, которую вы получаете в wchar_t, в UTF-8: http://php.net/manual/en/function.mb-convert-encoding.php — Используйте PHP Info, чтобы убедиться, что версия вашего PHP поддерживает MultiByte Strings.

Библиотека MultiByte может помочь вам, если вы не уверены также в кодировке с помощью mb_detect_encoding () или для проверки того, что строка находится в определенной кодировке, с помощью mb_check_encoding ().

1
По вопросам рекламы [email protected]