2012-06-20 11 views
7

so che sembra molto comune e così banale ma, sto avendo una sfida qui. Ho un sito web con Zend/Doctrine e io uso il ckeditor per la gestione del backend. dopo aver caricato il sito mi sono reso conto che durante i test di modifica l'aspetto del sito è incasinato.come impedire al database di aggiungere la barra alle virgolette

con l'aiuto di firebug, ho visto che ci sono delle barre in tutto il codice HTML. dopo l'edizione inline, l'aspetto è tornato alla normalità. Ci sono così tanti file, non posso pensare di fare altre decodifiche prima di emettere dati da mysql.

Quali opzioni devo risolvere questo problema. il sito è già pronto e mi sento un po 'scomodo su questo. Qualcuno può dare un suggerimento? grazie

+4

ninja segreto magic quotes lotta è php <5,4 stile. – hakre

risposta

4

Ringrazio tutti per l'aiuto. Davvero la soluzione accettata dovrebbe essere quella di @Stanislav Palatnik. solo che non ha funzionato con il mio .htaccess. il server di hosting è stato abbastanza carino da mettere un php.ini nel mio public_html permettendomi di cambiarlo. Quindi +1 a @Stanislav Palatnik perché ha sottolineato il problema. ho anche trovato informazioni interessanti che pensavo condividessero nel caso qualcuno si fosse trovato nella mia situazione.

info from: http://support.godaddy.com/groups/web-hosting/forum/topic/how-to-turn-off-magic_quotes_gpc/ 
Yes – the solution below worked for me: 

(1) First of all do not try to turn off the magic quotes in your .htaccess file, it won’t work on godaddy. 
(2) Second, if you’re running PHP5 on your account, rename your php.ini file to php5.ini, make sure it’s in your root folder. 
(3) Third, make sure all the lines in your php5.ini file end in a semi colon ; 
(4) Fourth, add this line to your php5.ini file: 
magic_quotes_gpc = Off; 

sulla stessa pagina qualcuno dicono che non dovrebbe essere solo magic_quotes_gpc solo, ma partecipavano come indicato qui sotto altri quelli:

magic_quotes_gpc = Off; 
magic_quotes_runtime = Off; 
magic_quotes_sybase = Off; 

Spero che questo ha aiutato qualcuno.Un ringraziamento speciale a @Stanislav Palatnik

+1

No, davvero, questa è la risposta giusta su un server host condiviso (come GoDaddy). Funziona come un fascino! – Sablefoste

9

Potrebbe essere magic_quotes_gpc. Puoi verificare che sia spento?

Ecco un modo per disattivarlo: http://php.net/manual/en/security.magicquotes.disabling.php

imposta lo stato magic_quotes per GPC (Get/Post/Cookie). Quando magic_quotes sono, all '(single-citazione), "(virgolette), \ (barra rovesciata) e NUL di sono preceduti da un backslash automaticamente.

Inoltre, stai usando istruzioni preparate? PHP DOP/MySQLi uscirà automaticamente per te. Dipende dal tipo di query che stai utilizzando.

+0

Ciao.molto gentile da rispondere prontamente. Purtroppo, aggiungendolo in.htaccess server interno .anche guru di zend qui? È possibile aggiungerlo application.ini? –

+0

Qual è esattamente il problema? –

5

Sembra che i dati vengano sottoposti a doppio escape prima di essere inseriti nel database. Si sta utilizzando mysql_real_escape_string o addslashes prima di inserire i dati nel database. database? In caso affermativo, forse si desidera utilizzare strips strisce prima di inserire i dati in questo modo:

mysql_real_escape_string(stripslashes($data)); 

altrimenti si potrebbe teoricamente chiamare stripslashes dopo si prende i dati dal database:

stripslashes($data); 

Il secondo approccio è meno desiderabile, però. Sarebbe meglio avere i dati correttamente memorizzati nel database.

2

Nel caso in cui questa è una magia cita problema e come ricordo solamente di accedere ai tuoi Application.ini, si potrebbe aggiungere quanto segue e fare un tentativo

phpSettings.magic_quotes_gpc = 0 
phpSettings.magic_quotes_runtime = 0 

Questo richiede ancora la vostra utente/gruppo di utenti per poter modificare le impostazioni php predefinite;)

0
<?php 
    if (get_magic_quotes_gpc()) { 
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST); 
while (list($key, $val) = each($process)) { 
    foreach ($val as $k => $v) { 
     unset($process[$key][$k]); 
     if (is_array($v)) { 
      $process[$key][stripslashes($k)] = $v; 
      $process[] = &$process[$key][stripslashes($k)]; 
     } else { 
      $process[$key][stripslashes($k)] = stripslashes($v); 
     } 
    } 
} 
unset($process);} 
?> 

aggiungere questo alla vostra pagina php che ha inserire interrogazione/aggiornamento :)

Problemi correlati