Visualizzazione risultati 1 fino 10 di 10

Discussione: Bypassare addslashes automatico

  1. #1
    Guest

    Predefinito Bypassare addslashes automatico

    Salve a tutti. Sto creando un nopaste con GeSHi, solo che ho un problema.
    Intanto, una pagina di prova la trovate a: http://crashinside.net/
    Il mio problema è che quando scrivo il sorgente sul file che fungerà da database, vengono aggiunti i backslash ('\'), come qui su AV, a tutte le vergolette. Tempo fa avevo risolto con stripslashes(addslashes($source)); solo che ora non funziona. Come si può evitare addslashes() automatico? Se si deve cambiare qualche opzione dal php.ini posso farlo, quindi se mi aiutate grazie mille

  2. #2
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,226

    Predefinito

    Io ho risolto questo problema aggiungendo in un file .htaccess questa regola:

    Codice PHP:
    php_flag magic_quotes_gpc On
    Come puoi ben vedere sul mio sito (Miki92) non da errori di sintassi nè funge male.
    Ultima modifica di miki92 : 30-05-2009 alle ore 19.55.04
    Apprezzi l'aiuto? Offrimi un caffè!

  3. #3
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    ma l'aggiunta di slashes avviene quando scrivi il file o quando ottieni il testo dall'array $_POST ?

  4. #4
    Guest

    Predefinito

    Quando scrivo il file, presumo, comunque ho risolto. Quando leggo il file uso str_replace per sostituire \" con "
    EDIT: ho un'altro problema. Non so perchè ma la soluzione di miki va in collisione con il resto del codice del file .htaccess. Il codice è:
    Codice PHP:
    RewriteEngine On
    RewriteRule
    ^(\w+)$ index.php?mode=view&file=$1
    Se metto il codice di miki, prima o dopo queste istruzioni, viene un 500.
    Ho il problema che saltano fuori anche caratteri come \\" o \\', che str_replace stranamente non cambia. Posto il pezzo di codice incriminato:
    Codice PHP:
    <?php
    if(isset($_GET['mode']) && isset($_GET['file']) && $_GET['mode'] == "view") {
    $f = file("sources/".$_GET['file'].".txt");
    $name = array_shift($f);
    $lang = array_shift($f);
    foreach(
    $f as $l) {
    $ff[] = str_replace(array('\"',"\'",'\\"',"\\'"),array('"',"'",'\"',"\'"),$l);
    }
    print
    "<span id=\"subtitle\">".$name."</span><br>";
    $gh = new GeSHi(join("",$ff), $lang);
    $gh->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS);
    echo
    $gh->parse_code();
    ?>
    un file del mio nopaste è così strutturato:
    Codice:
    nome
    linguaggio
    sorgente
    Uso file() per recuperare le linee del file che si vuole vedere, poi tolgo con array_shift() il nome del sorgente e il linguaggio, e uso foreach() per eliminare i caratteri che danno noia. Unica soluzione, secondo me: far funzionare il codice htaccess di miki in combinazione con il mio.
    RI-EDIT: ho verificato che gli slash vengono messi alla scrittura del file, e che il codice di miki mi restituisce sempre e comunque un 500, anche se lo provo senza l'altro codice
    RI-RI-EDIT: stando alla pagina: http://tinyurl.com/lmxbzc magic_quotes_gpc va impostato a off per togliere l'effetto dell'addslashes() automatico
    RI-RI-RI-EDIT: risolto con
    Codice PHP:
    str_replace("\\\\","\\",$var_del_source);
    Ultima modifica di gabryhacker : 31-05-2009 alle ore 11.14.09

  5. #5
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    è un concatenarsi di pezze.... tornare alla radice e capire perchè scrivendo il file aggiungono gli slash non è meglio?

  6. #6
    Guest

    Predefinito

    Ho provato in tutti i modi a settare a off magic_quotes_gpc, ma il mio spazio web non lo permette. Quindi ho "tappezzato" il problema, e, pur sempre in maniera sporca, ho risolto

  7. #7
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    ma allora bastavano tre righe di codice tipo queste

    Codice PHP:
    if (get_magic_quotes_gpc())
    foreach(
    $_POST as $i => $j)
    $_POST[$i]=stripslashes($j);
    da inserire all'inizio dello script per annullare gli effetti di quell'opzione e rendere lo script compatibile anche con altre configurazioni

  8. #8
    Guest

    Predefinito

    Ma se devo inserire un codice con degli slash presenti, stripslashes() li leva tutti. Esempio devo inviare il seguente codice:
    Codice PHP:
    <?php
    print "<a href=\"http://forum.it.altervista.org/\">AV Forum</a>";
    ?>
    stripslashes() lo fa diventare:
    Codice PHP:
    <?php
    print "<a href="http://forum.it.altervista.org/">AV Forum</a>";
    ?>
    Fidati ho provato

  9. #9
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    se get_magic_quotes_gpc() è true allora puoi eliminare il "primo livello" di \ contenuti in una qualsiasi stringa dell'array $_POST

    ovviamente se tu passi via post una cosa tipo questa

    <a href=\"http://forum.it.altervista.org/\">AV Forum</a>

    questo diventerà

    <a href=\\\"http://forum.it.altervista.org/\\\">AV Forum</a>

    e stripslashes() si limiterà a farlo tornare alla forma originale

  10. #10
    Guest

    Predefinito

    Hai ragione, ma invece di stripslashes uso str_replace che fa diventare \\ in \. Più o meno è la stessa cosa

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •