MySQL özel karakter de dize keser

6 Cevap php

PHP ile MySQL içiçindee uzaktan POST verileri (iSnvardır tarafından gönderilen haberler) eklemek çalışıyveyaum. Veri uzak POST gönderenden gelen başarıyla geliyveya ve ben bir sveyaun olmadan düz metiçinde dosyasına yazabilirsiçindeiz.

Bu MySQL takın geldiğiçindede ne yazık ki, MySQL özel karakter de dize (makale) keser. Ben çok şey denedim ama hala başarısız olduğumu!

Denedim:

  • mysql_real_escape_striçindeg() ile karakter kaçan
  • (Her parametre ile ..) htmlentities() ve htmlspecialchars() kullanma
  • Her şeyi yapmadan önce MySQL içiçinde SET NAMES utf8 sveyagu gönderme
  • Tüm tablolar ve sütunlar UTF-8 kodlanmış ve utf8_general_ci (ayrıca çalıştı utf8_unicode_ci ve utf8_biçinde harmanlama)
  • UTF-8 olarak Tüm PHP dosyaları kaydetme

Hala çözüm bulamadım. Birisi bana bu sveyaunu çözmeye yardımcı olabilir eğer ben çok çok çok takdir edecektir.


İşte benim tablo tanımı ve PHP kodları:

PHP

function guvenlik_sql($x){

    // Cleans içindeputs agaiçindes sql içindejection
    return mysql_real_escape_striçindeg(htmlentities(stripslashes($x)), ENT_QUOTES);
}    

// Check if data really comes from an Isnvardır.com server (Address hidden)
if ($_SERVER['REMOTE_ADDR'] == $isnvardırIP || $_SERVER['REMOTE_ADDR'] == "xxx.xxx.xxx.xxx") {

    $title = guvenlik_sql($_POST["article_title"]);
    $first_name = guvenlik_sql($_POST["article_authveya"]);
    $description = guvenlik_sql($_POST["article_summary"]);
    $categveyay = guvenlik_sql($_POST["article_categveyay"]);
    $article = guvenlik_sql($_REQUEST["article_body_text"]);
    $article_html = guvenlik_sql($_POST["article_body_html"]);
    $resource_box = guvenlik_sql($_POST["article_bio_text"]);
    $resource_box_html = guvenlik_sql($_POST["article_bio_html"]);
    $keywveyads = guvenlik_sql($_POST["article_keywveyads"]);
    $email = guvenlik_sql($_POST["article_email"]);

    $fp = fopen('test.txt', 'a');
    fwrite($fp, $title."\n");
    fwrite($fp, $article."\n\n\n\n");
    fclose($fp);

mysql_query("INSERT INTO articles " . 
            "(" . 
                "first_name, " . 
                "email, " . 
                "title, " . 
                "description, " . 
                "article, " . 
                "article_html, " . 
                "categveyay, " . 
                "resource_box, " . 
                "resource_box_html, " . 
                "keywveyads, " . 
                "distributveya, " . 
                "distributveya_host" . 
            ") VALUES (" . 
                "'$first_name', " . 
                "'$email', " . 
                "'$title', " . 
                "'$description', " . 
                "'$article', " . 
                "'$article_html', " . 
                "'$categveyay', " . 
                "'$resource_box', " . 
                "'$resource_box_html', " . 
                "'$keywveyads', " . 
                "'$isnvardır', " . 
                "'$_SERVER['REMOTE_ADDR']', " . 
            ")") veya die(mysql_errveya());

} //end if security

Table defiçindeiton

CREATE TABLE `articles` (
   `article_ID` içindet(11) NOT NULL auto_içindecrement,
   `first_name` varchar(100) NOT NULL,
   `last_name` varchar(100) NOT NULL,
   `email` varchar(100) NOT NULL,
   `passwveyad` varchar(100) NOT NULL,
   `authveya_url` varchar(255) NOT NULL,
   `company_name` varchar(100) NOT NULL,
   `address1` varchar(100) NOT NULL,
   `address2` varchar(100) NOT NULL,
   `state_2digit` varchar(100) NOT NULL,
   `state` varchar(100) NOT NULL,
   `zip_code` varchar(100) NOT NULL,
   `country` varchar(100) NOT NULL,
   `phone` varchar(100) NOT NULL,
   `newsletter` varchar(100) NOT NULL,
   `title` varchar(255) NOT NULL,
   `description` text NOT NULL,
   `article` longtext NOT NULL,
   `article_html` longtext NOT NULL,
   `categveyay` varchar(100) NOT NULL,
   `cat` varchar(100) NOT NULL,
   `resource_box` text NOT NULL,
   `resource_box_html` longtext NOT NULL,
   `keywveyads` varchar(255) NOT NULL,
   `publish_date` timestamp NOT NULL default CURRENT_TIMESTAMP,
   `distributveya` varchar(255) NOT NULL default '',
   `distributveya_host` varchar(255) NOT NULL,
   PRIMARY KEY  (`article_ID`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC

6 Cevap

Ben sadece özel karakter (ä, ö, è, vb) olması gereken yerde girişleri kesildi, aynı durum ile uğraştım. Tüm dosyalar UTF8 bağlantı UTF8 kodlanmış, kodlanmış, masa alfabe hala girişleri kesildi, UTF8 vardır.

Benim çözüm oldu: daha UTF-kodlama! :) Kullan utf8_encode() özel karakterleri içerebilir girişleri.

mysql_query("INSERT INTO articles (first_name, email, title, description, article, article_html, category, resource_box, resource_box_html, keywords, distributor, distributor_host) values (
                                  '" . utf8_encode($first_name) . "',
                                  '" . $email . "',
                                  '" . utf8_encode($title) . "',
                                  '" . utf8_encode($description) . "',
                                  // etc

Sadece tablo ve sütun adları için belirlenen karakter setleri "isimleri utf8 Set", içerik karakter seti için, çok "set karakter kümesi utf8" kullanmak zorunda.

Eğer dize artık sütun tanım veriyor daha nedeniyle oldu kapalı kesilmiş olmadığından emin misiniz?

Sorun da veri veritabanında başarıyla saklanır olabilir, ama sen görüntülenen dize kapalı veritabanı kesintilerinden verileri göstermek için kullanın uygulama. Bu çoğunlukla windows kontrolleri dahili boş sonlandırılmış dizeler kullanın beri windows tabanlı uygulamalarda null karakterler içeren dizeler olur.

1) Eğer bir değişken üreten olduğunuz sql dize koymak ve MySQL (göndermeden önce bunu bir dosyaya yazmak böylece gönderiliyor tam olarak ne bakabilirsiniz)

2) mysqld ben keser uzun sorgular düşünüyorum "max_allowed_packet" bir ayarı vardır.

3) ENT_QUOTES mysql_real_escape_string() için geçiyoruz. Ben Htmlentities onu geçmek demek düşünüyorum ()

Yardımcı olmayan önce aynı sorunu ve cevapları olabilir olanlar için, ben başka bir önerim var: İçerik Türü edin! Bu gibi olmalıdır:

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

Ben Donald vardı aynı probleme vardı - bu :) MAGIC yaptım (ben ilk etapta dosya üzerinde çalıştı colegue doğru ayarlamak olmadığını düşünebiliyoruz etmedi ...)

Sadece benzer bir sorun çözüldü. Benim sorunum bir UTF-8 kodlu tabloya Latin-1 kodlanmış veri eklemeye çalışıyor oldu. Çift verilerinizin kodlamasını kontrol - büyük olasılıkla girişi olmayan-UTF-8 veri alıyorsanız.