php mysql karakter kümesi: uluslararası içerik depolama html

4 Cevap php

Tamamen ben karakter setleri hakkında ne okudum kafamı karıştırdı. Ben bir mysql veritabanı içinde html biçimlendirilmiş fransız metin depolamak için bir arayüz geliştiriyorum.

What i understood was that the safe way to have all french special characters displayed properly would be to store them as utf8. so i've created a mysql database with utf8 specified for the database and each table. I can see through phpmyadmin that the characters are stored exactly the way it is supposed to. But outputting these characters via php gives me erratic results: accented characters are replaced by meaningless characters. Why is that ?

ben onları utf8_encode veya utf8_decode gerekiyor? Not: html sayfası karakter encodign utf8 ayarlanır.

daha genel olarak, bu verileri depolamak için güvenli yolu nedir? I kaydederken htmlentitiesi, addslashes ve utf8_encode birleştirmek ve stripslashes, html_entity_decode ve utf8_decode i çıkış ne zaman gerekir?

4 Cevap

MySQL connection charset denilen şey anında karakter kümesi dönüşümleri gerçekleştirir. Sen sql deyimini kullanarak bu charset belirtebilirsiniz

SET NAMES utf8

veya örneğin, belirli bir API işlevini kullanın mysql_set_charset(),

mysql_set_charset("utf8", $conn);

Eğer bu yapılırsa doğru biçimde utf8_encode () ve utf8_decode () gibi fonksiyonları kullanmaya gerek yoktur.

Ayrıca tarayıcı aynı kodlama kullanır emin olmak gerekir. Bu genellikle basit bir başlık kullanılarak yapılır:

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

(Tarayıcıda utf-8 charset denir unutmayın ama utf8 MySQL.)

Çoğu durumda bağlantı charset ve web charset izlemenize gereken tek şey, bu yüzden hala işe yaramazsa başka eğer senin yanlış yaptığını büyük olasılıkla bir şey var. Onunla biraz deneme deneyin, genellikle bir süre tam olarak anlamak için alır.

Bu PHP oluşturulan ön uç ve arka uç MySQL ayrı bileşenleri dikkate almak yararlı olur. MySQL ekran mantığı hakkında endişelenmenize gerek olmamalıdır, ne de PHP arka uç veri önişlemesini her türlü yaptığı üstlenmelidir.

My advice would be to store the data in plain characters using utf8 encoding, and escape any dangerous characters with MySQLs methods. PHP then reads the utf8 encoded data from database, processes them (with htmlentities(), most often), and displays it via whichever template you choose to use.

Emil H. doğru kullanarak önerdi

 SET NAMES utf8

hangi bir MySQL bağlantısı yaptıktan sonra çağrı ilk şey olmalıdır. Bu MySQL utf8 olarak tüm giriş ve çıkış tedavi yapar.

Eğer utf8_encode veya utf8_decode işlevleri kullanmak için varsa, doğru html karakter kodlaması ayarı olmadığını unutmayın. Bu şekilde daha sonra sorunlarını takip etmek zor neden olabilir manuel kodlama / kod çözme, yapmak zorunda asla beri sisteminin her bir bileşeni, utf8 kullandığı gerektiren en kolayıdır.

Emil H söylediklerini adition, ayrıca sayfanızda head etiketi Bu gerekir:

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