UTF-8 Sorun yok, Fikir

7 Cevap php

Benim web sayfasında bazı belgeler ile garip bir sorun var.

Benim veri MySQL veritabanında saklanır, UTF8 kodlanmış. Değerleri benim webbpage görüntüler okursanız

Rezept: Gemse mal anders (Gemselaibchen)

Ben ü / ü gerekiyor!

Veritabanında içerik "Gemüse ..." dir ..

Benim error_log yılında ham verileri bu gibi görünüyor

[Title] => Rezept: Gemüse mal anders (Gemüselaibchen)

Web sayfası başlığıdır:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<!--[if IE]>
  <link rel="stylesheet" href="http://www.dev-twitter-gewitter.com/css//blueprint/ie.css" 
        type="text/css" media="screen, projection">
<![endif]-->

<meta name="text/html; charset=UTF-8" content="Content-Type" />

7 Cevap

Büyük olasılıkla olarak latin1 göndermek için yapılandırılmış, bu yüzden tarayıcı geçersiz UTF-8 bayt dizileri görüyor ve "bir karakter" motifi çıkışları - MySQL UTF-8 olarak çıktı istediğiniz bilmesi gerekir.

Hemen MySQL bağlantı açtıktan sonra sorgu "SET İSİMLERİ utf8" Gönder, veya (mümkünse) yapılandırmasını değiştirmek.

You have to set the encoding of your web page.

Kodlamasını belirlemek için üç yolu vardır:

  1. HTML/XHTML: HTTP başlığı kullanın:

    Content-Type: text/html; charset=UTF-8
    
  2. HTML: bir meta elemanı kullanın: (Ayrıca olası XHTML için, ama biraz alışılmadık)

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    
  3. XHTML only, giriş kısmında kodlama ayarlama: (Preferred for XHTML)

    <?xml version="1.0" encoding="UTF-8"?>
    

If you want to verify the problem first:

İlk tarayıcınızı kullanarak manuel kodlamasını değiştirmek. Eğer bu çalışırsa, sizin HTML dosyasında ayarlayabilirsiniz. Aksi takdirde kullanıcıların istasyonlarında iş istasyonu üzerinde çalışır, ancak değil edeceğiz, otomatik algılama manuel kodlama sıfırlamak emin olun!

A PHP speciality: emin olun sizin internal encoding da, UTF-8 için ayarlanmış! Tüm çıkışlar bu kodlama dönüştürülür.

Her dosyanın üstündeki mb_internal_encoding kullanarak iç kodlama zorlayabilir.

After all: Kodunuzu aslında UTF-8 kodlanmış değilse Tüm bu yardımcı olmaz! Bu ise UTF-8 kodlaması yok olabilecek herhangi bir yardımcı işlevleri vardır olmadığını kontrol edin.

Kodlamasının yanlış olduğu zaman Unicode değiştirme karakteri yalnızca görünür. Yani sizin durumunuzda UTF-8 kodlanmış olarak verilerinizi ilan ama (alıntı azından kısmı) değildi. ü ISO 8859-1 kodlanmış 0xFC olduğunu, ancak UTF-8 geçersiz sekizli bulunuyor.

Böylece veri aslında UTF-8 ile kodlanmış olduğundan emin olmak gerekir. Belirli bir dize UTF-8 olup olmadığını kontrol, örneğin fonksiyonlar vardır mb_detect_encoding or this is_utf8 function .

Bunu yapın:

header('Content-Type: text/html; charset=utf-8');

herhangi bir içeriği çıktısı önce.

Sorun veritabanına bağlantı Latin1 kullanan olasıdır. Bu bildiğim kadarıyla birçok MySQL kurulumları varsayılan.

Charset bağlantıyı maç anında dönüştürülür gibi, bunu getir zaman veritabanında siz latin1 olarak alacak utf-8 olarak veri depolamak bile anlamına gelmektedir.

İki seçeneğiniz var:

1. Change the default connection character set to be utf-8

Eğer MySQL sunucusu tüm kullanıcılar için davranışı değişecektir yapılandırma değiştirmek gibi veritabanından iso-8859-1 bekliyoruz aynı veritabanı sunucu üzerinde barındırılan diğer uygulamalar varsa bu sorun anlamına gelebilir.

2. Change the connection charset after each connect to the database

Eğer PHP5 kullanıyorsanız komut yerleşik kullanabilirsiniz:

mysql_set_charset('utf8');

http://php.net/manual/en/function.mysql-set-charset.php daha fazla bilgi için bkz.

Eğer PHP 4 üzerinde iseniz bunu böyle basit bir SQL sorgusu yapabilirsiniz:

mysql_query("SET NAMES 'UTF8'");

http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html daha fazla bilgi için bkz.

utf8_encode benim sorunum sabit. Iam emin değilim neden (, veritabanındaki verilerin, utf8 olan web sitesi utf8 olduğunu ..

Eğer web sunucusu nasıl yapılandırıldığı (eğer yanlış), özellikle de HTML başlıklarını kontrol etmelisiniz. Her zaman içerik-tipi kodlama göndermek için yapılandırılmış, ve HTML gibi <meta> etiketi aracılığıyla geçti kodlamayı overwrote - Ben apache konfigürasyonunda neden oldu geçmişte benzer bir sorunu vardı sayfa ve web sunucusu bu değeri farklıydı.