Visualizzazione risultati 1 fino 15 di 15

Discussione: str_replace() multiplo con annidamento if, else, elseif

  1. #1
    Guest

    Predefinito str_replace() multiplo con annidamento if, else, elseif

    Allora, devo cambiare gli spazi in -, ora volevo sapere se era possibile fare in modo che nella stessa variabile vengano rimpiazzati più caratteri oltre allo spazio, poi che tutti i caratteri speciali come punti esclamativi (!) e interrogativi (?) , slash e bacslash o tutti i caratteri che non restituiscano un 400 vengano eliminati! Praticamente ho creato questa funzione per fare in modo che in ogni topic venga generato un codice in HTML, BBCode e diretto del topic stesso ma queste cose mi impediscono il funzionamento totale della MOD.

    Codice PHP:
    // START Linkback on viewtopic.php || By J.C. Design ||
    $post_subject = ( $postrow[$i]['post_subject'] != '' ) ? $postrow[$i]['post_subject'] : '';
    $sostituto = array(1 => ' ');

    if ( (
    $board_config['url_rw'] == '1') || ( ($board_config['url_rw_guests'] == '1') && ($userdata['user_id'] == ANONYMOUS) ) )
    {
    $linkback = str_replace($sostituto, '-', $topic_title . '-vt' . $topic_id . '.html');
    //$linkback = str_replace("!!!", '-', $topic_title . 'vt' . $topic_id . '.html');
    $linkback = strtolower($linkback);
    }
    else
    {
    $linkback = append_sid(VIEWTOPIC_MG . '?' . $forum_id_append . '&' . $topic_id_append . '');
    }
    // END Linkback on viewtopic.php || By J.C. Design ||
    Un esempio per capire bene di cosa si tratta è questo, cioè, se qui: http://miosito.altervista.org/nome-topic!!!.html verrà restituito un 400: "Bad Request", credo per i "!!!" quindi è per questo che chiedo! Quindi vorrei fare in modo che tutti i caratteri come il ! e il ? o altri che potrebbero generare un errore 400 siano eliminati e se non sbaglio si può fare utilizzando la funzione explode() ma non capisco come la devo utilizzare anche leggendo la guida in php

    Grazie mille in anticipo ragazzi

  2. #2
    Guest

    Predefinito

    Io mi sono soffermato ai primi periodi del tuo post.

    devo cambiare gli spazi in -, ora volevo sapere se era possibile fare in modo che nella stessa variabile vengano rimpiazzati più caratteri oltre allo spazio
    Quale variabile?
    Usando un semplice str_replace non hai bisogno di variabili.
    Forse intendevi dire semplicemente se era possibile sostituire più caratteri con una sola chiamata a tale funzione. La risposta è sì: usando gli array come primo e secondo argomento. Leggi la guida di riferimento per maggiori info ed esempi.

    i caratteri che non restituiscano un 400
    Oibò, non sapevo che i caratteri avessero anche questo potere
    A parte gli scherzi, non ha senso quello che hai scritto.

    Leggendo il resto del post, mi pare di capire che vuoi usare l'URL rewriting, è così?
    E vuoi sostituire tutti i caratteri non alfanumerici per rinominare le pagine, giusto?

    Io per un sito ho usato questa funzione:
    Codice PHP:
    function titolo_rew($vecchio_titolo){
    $arr_accentate=array("à","è","é","ì","ò","ù");
    $arr_noaccento=array("a","e","e","i","o","u");
    $nuovo_titolo=str_replace($arr_accentate,$arr_noaccento,$vecchio_titolo);
    $nuovo_titolo=html_entity_decode($nuovo_titolo);
    $nuovo_titolo=str_replace("'","'",$nuovo_titolo);
    $nuovo_titolo=preg_replace("#[^a-zA-Z0-9-_ ]#","_",$nuovo_titolo);
    $nuovo_titolo=str_replace(" ","_",$nuovo_titolo);
    $nuovo_titolo=str_replace("___","_",$nuovo_titolo);
    $nuovo_titolo=str_replace("__","_",$nuovo_titolo);
    $nuovo_titolo=str_replace("--","-",$nuovo_titolo);
    $nuovo_titolo=str_replace("_-_","-",$nuovo_titolo);
    if(
    substr($nuovo_titolo,-1,1)=="_"){
    $nuovo_titolo=substr($nuovo_titolo,0,strlen($nuovo_titolo)-1);
    }
    return
    $nuovo_titolo;
    }

    ciaooooo!

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da debug Visualizza messaggio
    Io mi sono soffermato ai primi periodi del tuo post.


    Quale variabile?
    Usando un semplice str_replace non hai bisogno di variabili.
    Forse intendevi dire semplicemente se era possibile sostituire più caratteri con una sola chiamata a tale funzione. La risposta è sì: usando gli array come primo e secondo argomento. Leggi la guida di riferimento per maggiori info ed esempi. Oibò, non sapevo che i caratteri avessero anche questo potere
    A parte gli scherzi, non ha senso quello che hai scritto.
    Intendevo: come puoi vedere $linkback = str_replace() è una variabile no? Quindi vorrei fare tutto in quella variabile senza riscriverla 100 volte per ogni carattere!

    Non ti posso linkare la pagina perchè la prendete come spam ma se io vado ad un link: www.blabla.org/nome-topic!!!-vt#.html mi da un error 400, mentre se vado a www.blabla.org/nome-topic-vt#.html il topic si visualizza tranquillamente quindi vuol dire che i !!! causano un 400 no? Magari è impostato così il CMS, ma non lo so questo!


    Citazione Originalmente inviato da debug Visualizza messaggio
    [...] Leggendo il resto del post, mi pare di capire che vuoi usare l'URL rewriting, è così?
    E vuoi sostituire tutti i caratteri non alfanumerici per rinominare le pagine, giusto?

    Io per un sito ho usato questa funzione:
    Codice PHP:
    function titolo_rew($vecchio_titolo){
    $arr_accentate=array("à","è","é","ì","ò","ù");
    $arr_noaccento=array("a","e","e","i","o","u");
    $nuovo_titolo=str_replace($arr_accentate,$arr_noaccento,$vecchio_titolo);
    $nuovo_titolo=html_entity_decode($nuovo_titolo);
    $nuovo_titolo=str_replace("'","'",$nuovo_titolo);
    $nuovo_titolo=preg_replace("#[^a-zA-Z0-9-_ ]#","_",$nuovo_titolo);
    $nuovo_titolo=str_replace(" ","_",$nuovo_titolo);
    $nuovo_titolo=str_replace("___","_",$nuovo_titolo);
    $nuovo_titolo=str_replace("__","_",$nuovo_titolo);
    $nuovo_titolo=str_replace("--","-",$nuovo_titolo);
    $nuovo_titolo=str_replace("_-_","-",$nuovo_titolo);
    if(
    substr($nuovo_titolo,-1,1)=="_"){
    $nuovo_titolo=substr($nuovo_titolo,0,strlen($nuovo_titolo)-1);
    }
    return
    $nuovo_titolo;
    }
    ciaooooo!
    No, non devo usare il MOD_rewrite, il tutto è configurato per fare in modo che se utilizzo il MOD rewrite viene visualizzato il link al topic in html mentre se non lo utilizzo viene mostrato in php, esempio:

    mod_rewrite attivo (HTML): www.blabla.org/nome-topic-vt#.html

    mod_rewrite disabilitato (PHP): www.blabla.org/viewtopic.php?t=#.html

    Il CMS è configurato per far si che il link con mod_rewrite attivo abbia il titolo del topic stesso. Ora devo fare in modo che nel link generato con il mod_rewrite (ricordo, che serve solamente per scegliere come mostrarlo) nel link in HTML tutti i caratteri speciali ( [ ] * ? ! ^ / \ ecc. ecc.) non vengano inseriti perchè anche senza quelli il topic viene aperto lo stesso.


    PS: Se non hai capito in privato ti faccio vedere come funziona il tutto e si capisce sicuramente meglio )

    EDIT: Dimenticavo, gli else, if, elseif mi servono per sostituire i caratteri speciali SOLO QUANDO PRESENTI e non sempre!
    Ultima modifica di jcdesign : 16-06-2008 alle ore 15.10.06

  4. #4
    Guest

    Predefinito

    Aspetta, ma di quale CMS parli??

    Il mod_rewrite allora c'entra, come tu stesso hai ammesso!
    La funzione che ti ho scritto io ti restituisce proprio il nome da linkare senza caratteri strani.
    Provala e vedi se funzione e se ti va bene.


    ciao!

  5. #5
    Guest

    Predefinito

    Allora, ho provato a fare così:

    Codice PHP:
    // START Linkback on viewtopic.php || By J.C. Design ||
    $post_subject = ( $postrow[$i]['post_subject'] != '' ) ? $postrow[$i]['post_subject'] : '';
    $sostituto = array(1 => ' ');

    if ( (
    $board_config['url_rw'] == '1') || ( ($board_config['url_rw_guests'] == '1') && ($userdata['user_id'] == ANONYMOUS) ) )
    {
    $linkback = str_replace($sostituto, '-', $topic_title . '-vt' . $topic_id . '.html');
    $linkback = strtolower($linkback);

    function
    linkback($linkback){
    $arr_accentate=array("à","è","é","ì","ò","ù");
    $arr_noaccento=array("a","e","e","i","o","u");
    $nuovo_titolo=str_replace($arr_accentate,$arr_noaccento,$linkback);
    $nuovo_titolo=html_entity_decode($linkback);
    $nuovo_titolo=str_replace("'","'",$linkback);
    $nuovo_titolo=preg_replace("#[^a-zA-Z0-9-_ ]#","_",$linkback);
    $nuovo_titolo=str_replace(" ","_",$linkback);
    $nuovo_titolo=str_replace("___","_",$linkbacko);
    $nuovo_titolo=str_replace("__","_",$linkbacko);
    $nuovo_titolo=str_replace("--","-",$linkback);
    $nuovo_titolo=str_replace("_-_","-",$linkback);

    if(
    substr($linkback,-1,1)=="_"){
    $linkback=substr($linkback,0,strlen($linkback)-1);
    }
    return
    $linkback;
    }
    }
    else
    {
    $linkback = append_sid(VIEWTOPIC_MG . '?' . $forum_id_append . '&' . $topic_id_append . '');
    }

    // END Linkback on viewtopic.php || By J.C. Design ||
    Ma non funge. Allora, io ti posto i link così almeno capisci poi magari editi dopo che hai capito

    Allora, se vai qui tutto funziona perfettamente: http://www.makingart.org/ciao-tutti-vt42.html

    ma se va qui come vedi viene generato un 400: http://www.makingart.org/ciao-tutti!!!-vt42.html

    E se ti può essere utile ti posso mandare le sorgenti!

  6. #6
    Guest

    Predefinito

    Scusa eh, ma se il problema fossero quei punti esclamativi, attraverso la mia funzione li togli!
    Come fanno ad essere ancora nel link??

    Tu la variabile $nuovo_titolo dove la usi??


    ciao!

  7. #7
    Guest

    Predefinito

    Citazione Originalmente inviato da debug Visualizza messaggio
    Scusa eh, ma se il problema fossero quei punti esclamativi, attraverso la mia funzione li togli!
    Come fanno ad essere ancora nel link??

    Tu la variabile $nuovo_titolo dove la usi??


    ciao!
    Io le variabili nuovo titolo le ho cambiate con $linkback o ho fatto male? E ho utilizzato quel codice ma vengono visualizzati lo stesso

  8. #8
    Guest

    Predefinito

    Devi sostituire tutte le variabili $nuovo_titolo con $linkback, altrimenti non effettua correttamente le modifiche.


    ciao!

  9. #9
    Guest

    Predefinito

    Ti ringrazio per la tua disponibilità ma non riesco ancora a capire perchè non funziona, il link viene generato ma non toglie niente, ecco il codice che sto provando:

    Codice PHP:
    // START Linkback on viewtopic.php || By J.C. Design ||
    $post_subject = ( $postrow[$i]['post_subject'] != '' ) ? $postrow[$i]['post_subject'] : '';

    $uri_topic = $topic_title . '-vt' . $topic_id . '.html';

    function
    linkback($uri_topic){
    $arr_accentate=array("à","è","é","ì","ò","ù");
    $arr_noaccento=array("a","e","e","i","o","u");
    $linkback=str_replace($arr_accentate,$arr_noaccento,$uri_topic);
    $linkback=html_entity_decode($uri_topic);
    $linkback=str_replace("'","'",$uri_topic);
    $linkback=preg_replace("#[^a-zA-Z0-9-_ ]#","_",$uri_topic);
    $linkback=str_replace(" ","_",$uri_topic);
    $linkback=str_replace("___","_",$uri_topic);
    $linkback=str_replace("__","_",$uri_topic);
    $linkback=str_replace("--","-",$uri_topic);
    $linkback=str_replace("_-_","-",$uri_topic);
    $linkback=str_replace(" ","-",$uri_topic);

    if(
    substr($linkback,-1,1)=="_"){
    $linkback=substr($linkback,0,strlen($linkback)-1);
    }
    return
    $linkback;
    }

    if ( (
    $board_config['url_rw'] == '1') || ( ($board_config['url_rw_guests'] == '1') && ($userdata['user_id'] == ANONYMOUS) ) )
    {
    $linkback = strtolower($uri_topic);
    }
    else
    {
    $linkback = append_sid(VIEWTOPIC_MG . '?' . $forum_id_append . '&' . $topic_id_append . '');
    }

    // END Linkback on viewtopic.php || By J.C. Design ||
    Comunque solo gli spazi vorrei che vengano trasformati, cioè, se ci osno più di uno spazio viene sempre cambiato tutto in un - mentre gli altri caratteri dovrebbero proprio essere cestinati!

  10. #10
    Guest

    Predefinito

    Aridaie, cerca di ragionare.

    Se str_replace ritorna la stringa modificata, e tu assegni questa nuova stringa ad una variabile, se poi devi usare un'altra volta str_replace, devi applicarla a questa nuova stringa, non a quella vecchia, altrimenti la vecchia modifica (quella del primo str_replace) andrà persa!

    Utilizza, quindi, sempre la stessa variabile: o $linkback o $uri_topic


    ciao!

  11. #11
    Guest

    Predefinito

    Citazione Originalmente inviato da debug Visualizza messaggio
    Aridaie, cerca di ragionare.

    Se str_replace ritorna la stringa modificata, e tu assegni questa nuova stringa ad una variabile, se poi devi usare un'altra volta str_replace, devi applicarla a questa nuova stringa, non a quella vecchia, altrimenti la vecchia modifica (quella del primo str_replace) andrà persa!

    Utilizza, quindi, sempre la stessa variabile: o $linkback o $uri_topic


    ciao!
    Così invece?? Non funziona, debug, potresti spiegarmi? Stai parlando ad uno scemo quindi scusami ma non riesco a capire come e dove devo scrivere il codice:

    Codice PHP:
    // START Linkback on viewtopic.php || By J.C. Design ||
    function linkback($linkback){
    $uri_topic = $topic_title . '-vt' . $topic_id . '.html';
    $arr_accentate = array("à","è","é","ì","ò","ù");
    $arr_noaccento = array("a","e","e","i","o","u");
    $linkback = str_replace($arr_accentate,$arr_noaccento,$uri_topic);
    $linkback = html_entity_decode($uri_topic);
    $linkback = str_replace("'","'",$uri_topic);
    $linkback = preg_replace("#[^a-zA-Z0-9-_ ]#","_",$uri_topic);
    $linkback = str_replace(" ","_",$uri_topic);
    $linkback = str_replace("___","_",$uri_topic);
    $linkback = str_replace("__","_",$uri_topic);
    $linkback = str_replace("--","-",$uri_topic);
    $linkback = str_replace("_-_","-",$uri_topic);
    $linkback = str_replace(" ","-",$uri_topic);

    if((
    substr($linkback,-1,1)=="_") || ($board_config['url_rw'] == '1') || ( ($board_config['url_rw_guests'] == '1') && ($userdata['user_id'] == ANONYMOUS) ))
    {
    $linkback = substr($linkback,0,strlen($linkback)-1); }
    else
    {
    $linkback = append_sid(VIEWTOPIC_MG . '?' . $forum_id_append . '&' . $topic_id_append . '');
    }
    }
    /*
    if ( ($board_config['url_rw'] == '1') || ( ($board_config['url_rw_guests'] == '1') && ($userdata['user_id'] == ANONYMOUS) ) )
    {
    $linkback = $;
    }
    else
    {
    $linkback = append_sid(VIEWTOPIC_MG . '?' . $forum_id_append . '&' . $topic_id_append . '');
    }
    */

    // END Linkback on viewtopic.php || By J.C. Design ||

  12. #12
    Guest

    Predefinito

    Non mi sembra che tu abbia modificato qualcosa...

    Ti scrivo uno stralcio corretto:

    Codice PHP:
    $uri_topic = str_replace($arr_accentate,$arr_noaccento,$uri_topic);
    $uri_topic = html_entity_decode($uri_topic);
    $uri_topic = str_replace("'","'",$uri_topic);
    $uri_topic = preg_replace("#[^a-zA-Z0-9-_ ]#","_",$uri_topic);
    $uri_topic = str_replace(" ","_",$uri_topic);
    $uri_topic = str_replace("___","_",$uri_topic);
    $uri_topic = str_replace("__","_",$uri_topic);
    $uri_topic = str_replace("--","-",$uri_topic);
    $uri_topic = str_replace("_-_","-",$uri_topic);
    $uri_topic = str_replace(" ","-",$uri_topic);

    ciao!

  13. #13
    Guest

    Predefinito

    Ho scritto così:

    Codice PHP:
    // START Linkback on viewtopic.php || By J.C. Design ||
    if ( ($board_config['url_rw'] == '1') || ( ($board_config['url_rw_guests'] == '1') && ($userdata['user_id'] == ANONYMOUS) ) )
    {
    $linkback = $topic_title . '-vt' . $topic_id . '.html';
    $arr_accentate=array("à","è","é","ì","ò","ù");
    $arr_noaccento=array("a","e","e","i","o","u");
    $linkback = str_replace($arr_accentate,$arr_noaccento,$linkback);
    $linkback = html_entity_decode($linkback);
    $linkback = str_replace("'","'",$linkback);
    $linkback = preg_replace("#[^a-zA-Z0-9-_ ]#","-",$linkback);
    $linkback = str_replace(" ","-",$linkback);
    $linkback = str_replace("___","-",$linkback);
    $linkback = str_replace("__","-",$linkback);
    $linkback = str_replace("--","-",$linkback);
    $linkback = str_replace("_-_","-",$linkback);
    $linkback = strtolower($linkback);
    }

    else
    {
    $linkback = append_sid(VIEWTOPIC_MG . '?' . $forum_id_append . '&' . $topic_id_append . '');
    }

    // END Linkback on viewtopic.php || By J.C. Design ||
    e va perfettamente, grazie mille ma ho un problemino, mi elimina anche il punto prima dell'estensione html, e poi mi aggiunge anche un - prima di vt#, come/cosa devo scrivere per impedire che quel punto non venga rimpiazzato e non venga aggiunto un -?

    Poi vorrei sapere, dato che erano presenti tre unti esclamativi, da quello che ho capito avrebbe dovuto sostituirli con tre --- invece no, qual'è la stringa che tratta questo??

    Cioè, viene generato http://www.makingart.org/ciao-tutti--vt42-html al posto di http://www.makingart.org/ciao-tutti-vt42.html

    Grazie ancora per la disponibilità datami

  14. #14
    Guest

    Predefinito

    Sostituisci
    $linkback = $topic_title . '-vt' . $topic_id . '.html';
    con
    $linkback = $topic_title . 'vt' . $topic_id;

    e anche
    $linkback = strtolower($linkback);
    con
    $linkback = strtolower($linkback).'.html';


    ciao!

  15. #15
    Guest

    Predefinito

    Grazie infinite Debug, grazie della pazienza che hai avuto con me , ho risolto tutto scrivendo così:

    Codice PHP:
    // START Linkback on viewtopic.php || By J.C. Design ||
    if ( ($board_config['url_rw'] == '1') || ( ($board_config['url_rw_guests'] == '1') && ($userdata['user_id'] == ANONYMOUS) ) )
    {
    $linkback = $topic_title . '-vt' . $topic_id;
    $arr_accentate=array("à","è","é","ì","ò","ù");
    $arr_noaccento=array("a","e","e","i","o","u");
    $linkback = str_replace($arr_accentate,$arr_noaccento,$linkback);
    $linkback = html_entity_decode($linkback);
    $linkback = str_replace("'","'",$linkback);
    $linkback = preg_replace("#[^a-zA-Z0-9-_ ]#","",$linkback);
    $linkback = str_replace(" ","-",$linkback);
    $linkback = str_replace("___","-",$linkback);
    $linkback = str_replace("__","-",$linkback);
    $linkback = str_replace("--","-",$linkback);
    $linkback = str_replace("_-_","-",$linkback);
    $linkback = strtolower($linkback).'.html';
    }

    else
    {
    $linkback = append_sid(VIEWTOPIC_MG . '?' . $forum_id_append . '&' . $topic_id_append . '');
    }

    // END Linkback on viewtopic.php || By J.C. Design ||

Regole di scrittura

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