2009-07-16 5 views
3

Я унаследовал базу данных, которая содержит такие строки, как:Как получить ихххх для правильного отображения, используя PHP5

\ u5353 \ u8d8a \ u4e9a \ u9a6c \ u900a: \ u7f51 \ u4e0a \ u8d2d \ u7269: \ u5728 \ u7ebf \ u9500 \ u552e \ u56fe \ u4e66 \ uff0cDVD \ uff0cCD \ uff0c \ u6570 \ u7801 \ uff0c \ u73a9 \ u5177 \ uff0c \ u5bb6 \ u5c45 \ uff0c \ u5316 \ u5986

вопрос заключается в том, как я правильно ли это отобразить на странице HTML?

Я использую PHP5 для обработки строк.

+0

Просто для ясности ... содержит литеральную строку «\\ u5353» или эти кодовые точки? Я молюсь за вас, если его первый :) –

+0

База данных содержит строку, которая отображается выше. – 2009-07-16 23:17:08

ответ

2

на основе представления daremon, вот функция «unicode_decode», который будет преобразовывать \ ихххх в их UTF аналоги.

function unicode_decode($str){ 
    return preg_replace("/\\\u([0-9A-F]{4})/ie", "iconv('utf-16', 'utf-8', hex2str(\"$1\"))", $str);  
} 
function hex2str($hex) { 
    $r = ''; 
    for ($i = 0; $i < strlen($hex) - 1; $i += 2) 
    $r .= chr(hexdec($hex[$i] . $hex[$i + 1])); 
    return $r; 
} 
+0

Я не совсем уверен в том, что делает iconv() ... Руководства PHP сейчас отсутствуют. – 2009-07-17 07:34:37

3

< PHP 6 удручающе не знают о Unicode, так что вы должны сделать все сами:

  • Убедитесь, что база данных использует Unicode-способную кодировку для его подключения. Например, в MySQL директива задана по умолчанию-character-set =. UTF-8 является разумным выбором
  • Позвольте браузеру знать, какую кодировку вы используете. Существует несколько способов сделать это:

    1. Задайте значение кодировки в заголовке Content-Type. Что-то вроде header ('Content-Type: text/html; charset = utf-8');

    2. Используйте приведенный выше заголовок < meta http-equiv >.

    3. Установить параметр кодирования XML <? Xml encoding = "utf-8"? >

Вариант 1. имеет приоритет над 2. Я не уверен, где 3. умещается в.

Если вам нужно сделать какой-либо обработки строк до отображения данных, убедитесь, вы используете многобайтовые (mb_ *) строковые функции. Если у вас есть данные Unicode, поступающие из других источников в других кодировках, вам нужно будет использовать mb_convert_encoding.

4

1) Я скачал и установил Юникод шрифт с именем CODE2000

2) Я написал это:

<?php header('Content-Type: text/html;charset=utf-8'); ?> 
<head></head> 
<body style="font-family: CODE2000"> 
<?php 
// I had to remove some strings like ': ', 'DVD', 'CD' to make it in \uXXXX format 
$s = '\u5353\u8d8a\u4e9a\u9a6c\u900a\u7f51\u4e0a\u8d2d\u7269\u5728\u7ebf\u9500\u552e\u56fe\u4e66\uff0c\uff0c\uff0c\u6570\u7801\uff0c\u73a9\u5177\uff0c\u5bb6\u5c45\uff0c\u5316\u5986'; 
$chars = explode('\\u', $s); 
foreach ($chars as $char) { 
    $c = iconv('utf-16', 'utf-8', hex2str($char)); 
    print $c; 
} 

function hex2str($hex) { 
    $r = ''; 
    for ($i = 0; $i < strlen($hex) - 1; $i += 2) 
    $r .= chr(hexdec($hex[$i] . $hex[$i + 1])); 
    return $r; 
} 
?> 
</body> 
</html> 

3) Он произвел этот characters http://img267.imageshack.us/img267/9759/49139858.png, который может быть правильным. Например. 1-й символ (5353) действительно this, а второй (8d8a) - this. Конечно, я не могу быть на 100% уверен, но, похоже, он подходит. Может быть, вы можете взять это отсюда.

Это упражнение хорошо :)

+0

Блестящий .. спасибо! – 2009-07-17 01:00:54

+0

+1 для использования fileformat.info - Мне нравится этот сайт;) –

Смежные вопросы