В основном у меня есть эта строка:
Český, Deutsch, English (US), Español (ES), Français (France), Italiano, 日本語, 한국어, Polski, 中文(繁體)
И я хочу преобразовать его во все возможные объекты HTML (могут быть и русские символы!). Я попытался сделать разные функции «htmlspecialchars» и «htmlentities» с разными кодировками, но он возвращает пустые строки …
$l = htmlentities("Český, Deutsch, English (US), Español (ES), Français (France), Italiano, 日本語, 한국어, Polski, 中文(繁體) €", ENT_COMPAT, "BIG5-HKSCS"); $l = htmlentities($l, ENT_COMPAT, "KOI8-R"); $l = htmlentities($l, ENT_COMPAT, "EUC-JP"); $l = htmlentities($l, ENT_COMPAT, "Shift_JIS"); $l = htmlentities($l, ENT_COMPAT, "Shift_JIS"); echo $l;
возвращает пустую строку.
Любая помощь?
Вот моя функция «unutf8», которая преобразует все символы UTF8 в объекты HTML формы 〹
function unutf8($str) { return preg_replace_callback("([\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}|[\xF8-\xFB][\x80-\xBF]{4}|[\xFC-\xFD][\x80-\xBF]{5})", function($m) { $c = $m[0]; $out = bindec(ltrim(decbin(ord($c[0])),"1")); $l = strlen($c); for( $i=1; $i<$l; $i++) { $out = ($out<<6) | bindec(ltrim(decbin(ord($c[$i])),"1")); } if( $out < 256) return chr($out); return "&#".$out.";"; },$str); }
Он анализирует строку для действительных последовательностей символов UTF8 и преобразует многобайтовую последовательность в порядковое значение символа. Это очень грязно, и я не ожидаю получить какие-либо награды за хорошее кодирование, но это работает.
Обратите внимание, однако, что если у вас есть незашифрованные символы, вы столкнулись с проблемами. Например, если по какой-то причине у вас есть é ©©, тогда результат будет равен 驩. Убедитесь, что ваша строка верна UTF8 перед передачей ее функции.
Используйте заголовок для изменения HTTP-заголовка в utf-8:
header('Content-Type: text/html; charset=utf-8');
Кроме того, убедитесь, что ваш HTML-документ также находится в utf-8:
<meta http-equiv="Content-type" content="text/html" charset="utf-8" />
Не ищите жестких решений и просто следуйте этим небольшим и простым шагам: 1) mysql_set_charset («utf8», $ conn); установите это с помощью кода подключения к конфигурации.
или
2) mysql_query ("SET NAMES 'UTF8"); введите свой запрос здесь …….. mysql_set_charset («UTF8», queryResult);