Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    mysql_real_escape_string e caratteri speciali

    Buongiorno.

    Sto lavorando su opencart per realizzare un'applicazione per l'importazione dei dati dal mio gestionale.
    In alcune descrizione degli articoli talvolta č utilizzato il carattere "°" (gradi).
    L'applicazione di inserimento standard del software in questione utilizzata "mysql_real_escape_string" e accetta il carattere specificato in precedenza.
    Nella mia applicazione uso la medesima istruzione, ma l'importazione mi importa solo i caratteri precedenti a "°" e poi passa al prodotto successivo. Quindi non termina in errore.
    Eppure facendo il debug all'istruzione precedente all'import, la descrizione č completa con il carattere "°".
    E' evidente che c'č un errore, ma non riesco a venirne a capo.
    Qualcuno ha giā avuto un problema del genere e la risolto?
    Come?

    Grazie
    Ciao

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Assicurati che il tuo script, file compreso, rispetti il charset del resto dell'applicazione.
    Leggi il link che ho in firma riguardo i caratteri strani.

  3. #3
    Grazie Alhazred.

    Avevo pensato anche io al set dei caratteri, ma nel codice utilizzo solo variabili.
    Per non saper nč leggere, nč scrivere ho provato a modificare le impostazioni dell'editor (notepad++), ma nulla cambia.

    Comunque questo č il mio codice
    codice:
    $this->db->query("UPDATE  " . DB_PREFIX . "product_description 
    SET name = '" .   $this->db->escape($description_it) . "'  
    WHERE product_id = '" . (int)$product_id  . "' AND language_id =  '2'");
    -name- corrisponde alla descrizione del prodotto.

    mentre questo č il codice di opencart per l'inserimento dei prodotti
    codice:
     $this->db->query("DELETE FROM " . DB_PREFIX . "product_description 
    WHERE product_id = '" . (int)$product_id . "'");
            
    foreach ($data['product_description'] as $language_id => $value) {
    $this->db->query("INSERT INTO " . DB_PREFIX .  "product_description 
    SET product_id = '" . (int)$product_id . "',  language_id = '" . (int)$language_id . "', 
    name = '" .  $this->db->escape($value['name']) . "', 
    meta_keyword = '" .  $this->db->escape($value['meta_keyword']) . "', 
    meta_description =  '" . $this->db->escape($value['meta_description']) . "',  
    description = '" . $this->db->escape($value['description']) . "',  
    tag = '" . $this->db->escape($value['tag']) . "'");
    }
    e la function di Opencart
    codice:
        public function escape($value) {
            if ($this->link) {
                return mysql_real_escape_string($value, $this->link);
            }
        }
    Ultima modifica di epiworld; 22-09-2014 a 12:05

  4. #4
    Finalmente ho risolto il problema.
    In effetti il problema era legato ancora al set di caratteri.
    Prima di aggiornale in MySQL, faccio convertire la variabile dalla funzione utf8_encode().

    codice:
    $this->db->escape(utf8_encode($description_it))
    Grazie per i suggerimenti.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.