Php utf-8 kodlama ile ilgili sorunlar

3 Cevap php

Başka bir utf-8 ile ilgili sorun, ben inanıyorum ...

Ben bir mysql db veri daha sonra başka sitede bu verileri görüntülemek güncellemek için php kullanıyorum. Daha önce bir tarayıcıda görüntülenebilir ama bu biraz farklı görünüyor zaman özel karakterler soru işareti olarak görüntülenir önce nerede utf-8 sorunlar haline çalıştırmak.

Ben è karakterini içeren girmek için kayıtların bir dizi var. Ben db doğrudan bu girerseniz ben utf-8 içeriği doğru çıktı ediliyor demek için bu öylesine almak o sayfada doğru olarak görünür.

Ben denemek ve php db değerleri güncelleştirmek Ancak, daha sonra è karakter değiştirilir. Olduğunu ve yerine görünür neler Atilde; & uml; (Boşluksuz) hangi à ¨ olarak tarayıcıda görüntülenir

Ben UTF-8 kullanmak üzere ayarlanmış veritabanındaki tablolar var. Ben phpMyAdmin, onun tüm Tamam db güncellemek eğer bu, belirttiğimiz gibi, doğru çünkü olduğuna inanıyorum. Benzer Ben doğru gibi görünüyor sayfanın karakter kodlamasını belirledik. Ben de sql deyimi çalıştırıyorum "İsimler 'utf8' SET;" db güncellemeye çalışıyorum önce.

Herkes sorunun nerede olabileceğini olarak herhangi bir başka fikirleri var?

Çok teşekkürler

3 Cevap

Evet.

Eğer sahip karakteri LATIN SMALL LETTER E WITH GRAVE. Eğer karakteri iki bayt 0xC3 ve 0xA8 içine kodlanmış olduğunu UTF-8, gördüğünüz gibi.

Ama birçok varsayılan, tek bayt olan (örneğin ISO-8859-1 gibi) batı kodlamaları sadece, bu multi-byte karakter, iki ayrı karakter, LATIN CAPITAL LETTER A WITH TILDE ve DIAERESIS olarak çözülür . Her ikisi de C3 olarak kodlanır dikkat edin ve A8 ISO-8859-1 in?

PHP htmlentities() ki à ve ¨, sırasıyla neden yoluyla bu karakterleri işliyor gibi Ayrıca, görünüyor.

Peki, tam olarak nerede kodunuzda sorun? Eğer düzgün 'UTF-8' ayarlanmış olmayabilir - 3'üncü argümanı bir kodlama adıdır beri Eh, htmlentities() kendisi tarafından tüm yapıyor olabilir. Ama aynı zamanda bazı diğer dize işleme fonksiyonu olabilir. (Note: As a general rule, it's a bad idea to store HTML entities in the database - this step should be reserved for time of display)

Php UTF-8 ile kendinizi yolculuk için başka yollar bir demet vardır - Ben the cheatsheet kadar isabet önermek ve iyi durumda olduğundan emin olun.

Ben bazı form gönderme sonuçlarını alarak ve sonuçları veritabanında takıyor varsayalım. Eğer öyleyse, UTF-8 veri göndermek için tarayıcı talimat emin olmalı ve geçerli bir UTF-8 akışı için kullanıcı girişi doğrulamak gerekir.

Kabul-charset eklemek için form elemanı değiştirin:

<form accept-charset="utf-8" method="post" ... >
    <input type="text name="field" />
    ...
</form>

Ile verileri doğrulamak:

$valid = array_key_exists("field", $_POST) && !is_array($_POST['field']) &&
    preg_match('//u', $_POST['field']) && ...; //check length with mb_strlen etc.

Ben size html sayfasında Content-Type deklarasyon özledim düşünüyorum:

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

Eğer yoksa, tarayıcı kodlamasını tahmin edecek ve bir formu gönderme zaman kodlamanın dışında herhangi bir karakter varlıklara dönüştürmek.