Kodlama sorunları ile PHP / MySQL

3 Cevap php

Ben kodlama ile ilgili PHP ile sorun yaşıyorum.

I have a JavaScript/jQuery HTML5 page interact with my PHP script using $.post. However, PHP is facing a weird problem, probably related to encoding.

Ben yazarken

htmlentities("í")

I expect PHP to output í. However, instead it outputs í At the beginning, I thought that I was making some mistake with the encodings, however

htmlentities("í")=="í"?"Good":"Fail";

"Fail", çıktılamak nerede

htmlentities("í")=="í"?"Good":"Fail";

Ancak beklendiği gibi htmlentities($search, null, "utf-8") çalışır.

Ben PHP MySQL sunucusu ile iletişim kurmak istiyorum, ama ben utf8_encode kullansanız bile o, çok sorunları kodlama vardır. Ben ne yapmalıyım?

EDIT: SQL komutu üzerine, yazma

SELECT id,uid,type,value FROM users,profile
WHERE uid=id AND type='name' AND value='XXX';

XXX hayır ben karakter içerdiğinde, beklendiği gibi çalışır, ancak herhangi bir 'í' karakter varsa öyle değil.

SET NAMES 'utf8';
SET CHARACTER SET 'utf8';
SELECT id,uid,type,value FROM users,profile
WHERE uid=id AND type='name' AND value='XXX';

Not only fails for í chars, but it ALSO fails for strings without any 'special' characters. Removing the ' chars from SET NAMES and SET CHARACTER SET doesn't seem to change anything.

Ben PDO kullanarak MySQL veritabanı bağlıyorum.

EDIT 2: Linux için XAMPP MySQL 5.1.30 sürümünü kullanıyorum.

EDIT 3: SHOW VARIABLES LIKE '%character%' PhpMyAdmin çıkışlarından Koşu

character_set_client    utf8
character_set_connection    utf8
character_set_database  latin1
character_set_filesystem    binary
character_set_results   utf8
character_set_server    latin1
character_set_system    utf8
character_sets_dir  /opt/lampp/share/mysql/charsets/

Benim PHP komut dosyası çıkışları (print_r ile) aynı sorguyu çalıştıran:

Array
(
    [0] => Array
        (
            [Variable_name] => character_set_client
            [0] => character_set_client
            [Value] => latin1
            [1] => latin1
        )

    [1] => Array
        (
            [Variable_name] => character_set_connection
            [0] => character_set_connection
            [Value] => latin1
            [1] => latin1
        )

    [2] => Array
        (
            [Variable_name] => character_set_database
            [0] => character_set_database
            [Value] => latin1
            [1] => latin1
        )

    [3] => Array
        (
            [Variable_name] => character_set_filesystem
            [0] => character_set_filesystem
            [Value] => binary
            [1] => binary
        )

    [4] => Array
        (
            [Variable_name] => character_set_results
            [0] => character_set_results
            [Value] => latin1
            [1] => latin1
        )

    [5] => Array
        (
            [Variable_name] => character_set_server
            [0] => character_set_server
            [Value] => latin1
            [1] => latin1
        )

    [6] => Array
        (
            [Variable_name] => character_set_system
            [0] => character_set_system
            [Value] => utf8
            [1] => utf8
        )

    [7] => Array
        (
            [Variable_name] => character_sets_dir
            [0] => character_sets_dir
            [Value] => /opt/lampp/share/mysql/charsets/
            [1] => /opt/lampp/share/mysql/charsets/
        )

)

Koşu

SET NAMES 'utf8';
SET CHARACTER SET 'utf8';
SHOW VARIABLES LIKE '%character%'

boş bir dizi verir.

3 Cevap

Bu sizin son örnekte yaptım ama ilk üç ihmal gibi htmlentities, giriş o maç kodlamasını belirtmek için çok önemli.

htmlentities($text,ENT_COMPAT,'utf-8');

MySQL ile haberleşme ile ilgili olarak, bağlantı harmanlama ve karakter seti aktaran verileri eşleşen emin olmak gerekir. Ya aşağıdaki sorguları kullanarak yapılandırma dosyasında bu set, ya da zamanında yapabilirsiniz:

SET NAMES utf8;
SET CHARACTER SET utf8;

Emin olun tablo, veritabanı ve sunucu karakter setleri de maç. Orada çalışma zamanında değiştiremezsiniz ayarı biridir ve bu sunucunun karakter seti bulunuyor. Sen yapılandırma dosyasında değiştirmeniz gerekir:

[mysqld]
character-set-server = utf8
default-character-set = utf8 
skip-character-set-client-handshake

MySQL karakter setleri ve alfabe Devamı in the manual.

Late revival. But for further reference here are some extra tips:

  1. mysql_set_charset yerine SET xxx kullanımı
  2. UTF-8 kodlama ile dosya kaydetme (bu çoğu zaman göz ardı edilir) emin olun
  3. Set headers:
    <?php header("Content-type: text/html; charset=utf-8"); ?>

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

  4. Apache sunucu yapılandırma varsa, farklı bir kodlama ile bir AddDefaultCharset direktifi host yöneticiniz bağırma gidin.

Ben sadece bu sorunu içine koştu. Ben beklediğiniz tüm özel karakterler (áéíóúñ) ve bunların harf versiyonları ile, İspanyolca bir bütün web sitesinin içeriği var.

Benim durumumda bu sunucu charset / harmanlama ile bir tutarsızlık oldu. Her şey utf8 ayarlanır, ancak latin1 vardı sunucu charset, oldu. Bu ham kodlanmış formda görüntülemek için veritabanına girilen tüm utf8 verileri neden likel í ~ tilde ile A eşit olur ...

Ben mysqli kullanıyorum, ve bunu düzeltmek için, ben (mysql_set_charset kullanarak) Anthony Accioly tarafından yukarıda açıklanan yöntemi kullandı. Bahsedilen yöntem bir mysqli versiyonu var ve ben ne kullanılır.

Bundan sonra, ben şaşırmıştı. Web siteme bakarken ben hala bir karışıklık vardı. Tabii ki, ben bilmiyordum ben pisliği her şeyin karakteri kodlamak / decode de olur UTF8 bu Latin1 değiştirerek. Yani benim tablo verileri düzeltmek için online string encoder/decoder yardım kullanılır.

Ben bütün içerik çeşitli veri ihracat yapılmış (güncelleştirme sorguları almak için onları ayarlayabilirsiniz ve hızlı güncelleme işlemi için olacak) ve yukarıda belirtilen çevrimiçi kodlayıcı / kod çözücü sayesinde sql çıktı koştu, ardından sabit sorguları yapıştırılan kopya phpmyadmin sql paneli ... böylece benim kodlama hataları tespit. Her şey nasıl olmalıdır şimdi, VE ben yine kayıplı aramaları işlemek mümkün duyuyorum: Maria Maria, maria, Maria vb tüm maç maría, maria, Maria, tüm akut karakterler baz ünlü karakteri değerlendirmek. Epic Win.