HTML metin alanlarında metin kodlama

6 Cevap php

Bunun üzerine bir formu olan bir site up var. Form sonra benim veritabanına veri ekler bir php script mesajları. Sayfa bir charset = UTF-8 özniteliği etiketi, ve veritabanı UTF-8 kullanmak için kurulum. Ben alana MS Word kopyalama ve yapıştırma karakterler Ancak, çıkış berbat.

Örneğin, tırnak

Ben "Microsoft Word" kullanıyorum''''

olmak

Ben â € œMicrosoft Wordâ € kullanıyorum??

veritabanında.

Herkes bu oluşabilir neden herhangi bir fikrin var mı?

6 Cevap

İşte size sorun burada yatıyor bulmak için ne teklif ne.

  1. MySQL charset kullanır Latin1 depolamak ve varsayılan başına transfer çıkış / veri için. Bunu değiştirmek için, aşağıdakileri yapın. Charset UTF8/collation utf8_unicode_ci ile veritabanı oluşturma (bkz. http://dev.mysql.com/doc/refman/5.0/en/create-database.html).

    CREATE DATABASE example DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci;

  2. Giriş / çıkış UTF8'den gibi verileri işlemek için MySQL söyle. Herhangi bir SQL sorguları MySQL komut SET İSİMLERİ UTF8 gönderilmeden önce; yapılmalıdır. Bu UTF8 olarak sunucuya tüm giriş / çıkış veri kabul ve işlemek için MySQL söyler. Bu bağlantı başına sadece bir kez ayarlanması gerekir. Örneğin mysql_query("SET NAMES 'UTF8'"); ile ayarlayabilirsiniz.

  3. Aslında UTF8'i kullandığınızdan emin olun. Eğer <meta> etiketinde belirtilen UTF8'i olabilir taşıyamazsınız, sen acually başka charset içeriği gönderiyor olabilir. , Emin UTF8 kodlanmış içeriği yolluyorlar yapmak PHP dosyası için header('Content-Type: text/html; charset=utf-8'); eklemek için.

set names utf8 sorgu çalıştırmak ve kod tüm Recoding fonksiyonların kurtulmak

Değil Gerçek bir cevap ama bir öneri. İlk büyükannem (30 sn) testi deneyin: EditPad gibi iyi bir metin editörü içine kopyalamak istediğiniz MS Word metni yapıştırmak yanlısı veya notepad + + her şey beklendiği gibi from there Tekrar It kopyalamak görünür ve içinde It yapıştırmak formu.

Diğer bir deyişle MS WORD doğrudan kopyalama ve bir metin geçmiş yok.

Herhangi bir yerde herhangi bir karakter seti veya kodlamaları belirlemek ve aynı sorunlarla vermedi basit java webapp vardı. Benim durumumda, aşağıdaki değişiklikler istenilen davranışı üretilen:

  1. (MySQL kullanarak) UTF-8 kullanmak için db şema tanımını değiştirin.
  2. (MySQL Connector-J kullanarak) bağlantı URL UTF-8 belirtmek için db bağlantı URL'sini değiştirin
  3. UTF-8 olarak istek parametre verilerini yorumlamak için uygulama sunucusu yapılandırmasını değiştirin.
  4. UTF-8 belirlemek için üretilen tüm HTML sayfaları değiştirin.

Bir <textarea> ya da bir WYSIWYG formu gönderiyorsunuz? WYSIWYG JavaScript kendi kodlamasını yapıyor olabilir.

Farklı tarayıcılarda denediniz mi? Belirli bir tarayıcı ile bir hata olabilir. Sunucu çakışan başlıkları gönderiyor olabilir gibi Ayrıca, yerine bir meta etiketi ile arasında, PHP başlıklarını ayarı deneyin.

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

Eğer bir dosyaya $ _POST verileri kaydetmek ne olur? Kodlama tamam görünüyor mu?

file_put_contents('post.log', print_r($_POST, true));

Eğer bir metin dosyasına Word metni kopyalayıp veritabanına dosyanın içeriğini eklerseniz Sonra ne olur?

$db_query = 'INSERT INTO table SET col="' . mysql_real_escape_string(file_get_contents('input.txt')) . '"';

denemek

<form action="form_action.php" accept-charset="UTF-8">