\ UXXXX PHP5 kullanarak, doğru görüntü almak için nasıl

4 Cevap php

Ben gibi dizeler içeren bir veritabanı miras var:

\ 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

Soru nasıl bu bir HTML sayfası düzgün görüntülenecek alabilirim, değil mi?

Ben dizeleri işlemek için PHP5 kullanıyorum.

4 Cevap

Daremon dilekçesinde dayanarak, burada UTF muadilleri içine \ uXXXX dönüştürecek bir "unicode_decode" işlevidir.

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;
}

1) Ben indirilen ve CODE2000 adında bir unicode yazı tipini

2) Ben bu yazdı:

<?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) Bu 2 bir (8d8a) iken characters which could be correct. E.g. the 1st character (5353) is indeed this bu üretilen this. Tabii ki% 100 emin olamaz ama uygun görünüyor. Belki buradan alabilir.

Bu iyi bir egzersiz oldu :)

PHP < 6 Unicode acı farkında, bu yüzden her şeyi kendiniz yapmak zorunda:

  • Veritabanı olan bağlantıları için bir Unicode özellikli kodlamayı kullanarak emin olun. Örneğin MySQL, yönerge = default-character-set. UTF-8 makul bir seçimdir
  • Tarayıcı kullanarak hangi kodlama bildirin. Bunu yapmanın çeşitli yolları vardır:

    1. Set a charset value in the Content-Type header. Something like header('Content-Type: text/html;charset=utf-8');

    2. Bir kullanın Yukarıdaki başlığın sürümü.

    3. XML kodlama parametresini ayarlayın

1. seçenek. 2 önceliklidir. I 3. Uyuyor nerede emin değilim

Sen önce verileri görüntüleyen herhangi bir dize işlem yapmak gerekiyorsa, emin multibyte (MB_ *) string fonksiyonları kullanın olun. Diğer kodlamalar diğer kaynaklardan gelen Unicode verileri varsa, mb_convert_encoding kullanmanız gerekir.

http://www.phpwact.org/php/i18n/charsets: Burada çok PHP Unicode Kodlama üzerine yazı ile bulunuyor