12 ÷ 5 gibi Trouble kaydetme veri

3 Cevap php

Ben php kullanarak veritabanına kaydetmek için aşağıdaki verileri var

my data: 12 ÷ 5

Ben aşağıdaki kodu vardır:

  $.ajax({
    type: "POST",
    url: "add_proc.php",
    data: "topic="+ encodeURIComponent(field1)

Ben Firebug alan1 değerini kontrol ettiğinizde aynı 12 ÷ 5, ama değer veritabanına kaydedilir zaman 12 ÷ 5 bulunuyor.

     $topic=mysql_escape_string($_POST['topic']);
      echo($topic); 

Ben yazılan sonra değişkenin değerini yankı bile, ben olsun 12 ÷ 5.

Sorun nerede ben çözemiyorum?

3 Cevap

÷ ediliyor UTF-8 kodlu - http://www.fileformat.info/info/unicode/char/00f7/

#pseudo
utf8('÷')    => 'Ã' + '·'
utf8(0x00F7) => 0xC3, 0xB7

Kullanmak utf8_decode (I'm guessing the encoding is from $_POST) yapabilirsiniz:

$topic = mysql_escape_string(utf8_decode($_POST['topic']));

Veritabanı / tabloları Unicode/UTF-8 support olduğundan emin olun.

Alternatif olarak, bu kodlanmış bırakın ve sadece echo (Ates Göral önerilen) sayfa UTF-8 kodlaması ile şekilde tarayıcı sizin için çözme idare edecek.

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

Bu definitely bir kodlama sorundur. İşte nedeni.

Bölme işareti (U+00F7) 2 byte, 0xC3 ve 0xb7 gibi UTF-8 olarak kodlanmış.

U+00C3 ve U+00B7, sırasıyla Fakat ISO-8859-1 (ve diğer birçok kodlamalar) bu bayt ayrı iki ayrı karakterlerdir.

Yani somewhere süreç içinde UTF-8 kodlanmış bölme işareti diğer bazı kodlaması (ISO-8859-1 olasılıkla) olarak deşifre ediliyor.

Bir başlangıç ​​olarak PHP UTF-8 Cheatsheet göz atın. Eğer tüm bu adımlarda çalışmak ve hala bir sorun varsa, bana bildirin ve ben yardım etmek için ne yapabilirim görürsünüz.

Lütfen giriş HTML sayfası içeriği kodlaması UTF-8 olduğundan emin olun. Bu şekilde, PHP alıyor içeriği UTF-8 olduğunu bilecek.

Belgenizin baş aşağıdaki gömerek bunu yapabilirsiniz:

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

Update: Ayrıca üreten konum HTML (itibaren echo'ing) de içerik kodlaması olarak UTF-8 raporlar emin olun. Eğer yankı çalışma olsun, bir sonraki adım DB de UTF-8 depolama / bekliyor olduğunuzu sağlamaktır.