Visualizzazione risultati 1 fino 5 di 5

Discussione: Richiesta aiuto per funzione ereg_replace / preg_replace

  1. #1
    Guest

    Question Richiesta aiuto per funzione ereg_replace / preg_replace

    Ciao a tutti,
    come da titolo ho bisogno di aiuto per quanto riguarda le funzioni in oggetto.

    Ho scaricato uno script per la gestione delle news, però utilizza la funzione ereg_replace, caricandolo su altervista però mi dice che la funzione è deprecata. Cercando in giro si consiglia di usare la funzione preg_replace.

    Il mio problema è che non capisco come "passare" dall'una all'altra funzione.

    Riuscite ad aiutarmi ? (posto anche il codice php interessato).

    Grazie a tutti.

    Codice PHP:
    $fusnewsm = preg_replace("/(\\[\color=([^\\[]*)\\]([^\\[]*)\\[/color\\]","<span style=\"color:\\1\">\\2</span>)/i",$fusnewsm);
    $fusnewsm = eregi_replace("\\[size=([^\\[]*)\\]([^\\[]*)\\[/size\\]","<span style=\"font-size:\\1\">\\2</span>",$fusnewsm);
    $fusnewsm = eregi_replace("\\[img height=([^\\[]*)\\ width=([^\\[]*)\\]([^\\[]*)\\[/img\\]","<img src=\"\\3\" height=\"\\1\" width=\"\\2\" alt=\"\" />",$fusnewsm);
    $fusnewsm = eregi_replace("\\[img width=([^\\[]*)\\ height=([^\\[]*)\\]([^\\[]*)\\[/img\\]","<img src=\"\\3\" width=\"\\1\" height=\"\\2\" alt=\"\" />",$fusnewsm);
    $fusnewsm = eregi_replace("\\[img]([^\\[]*)\\[/img\\]","<img src=\"\\1\" alt=\"\" />",$fusnewsm);
    $fusnewsm = eregi_replace("\\[flash=([^\\[]*)\\,([^\\[]*)\\]([^\\[]*)\\[/flash\\]","<object classid=\"clsid: D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\"\\1\" height=\"\\2\"><param name=movie value=\\3><param name=play value=true><param name=loop value=true><param name=quality value=high><embed src=\\3 width=\\1 height=\\2 play=true loop=true quality=high></embed></object>",$fusnewsm);
    $fusnewsm = eregi_replace("\\[align=([^\\[]*)\\]([^\\[]*)\\[/align\\]","<div style=\"\\1\">\\2</div>",$fusnewsm);
    $fusnewsm = eregi_replace("\\[shadow=([^\\[]*)\\,([^\\[]*)\\,([^\\[]*)\\]([^\\[]*)\\[/shadow\\]","<span style=\"filter: shadow(color=\\1, direction=\\2); width=\\3px;\">\\4</span>", $fusnewsm);
    $fusnewsm = eregi_replace("\\[glow=([^\\[]*)\\,([^\\[]*)\\,([^\\[]*)\\]([^\\[]*)\\[/glow\\]","<span style=\"filter: glow(color=\\1, strength=\\2); width: \\3px;\">\\4</span>", $fusnewsm);
    $fusnewsm = eregi_replace("\\[email\\]([^\\[]*)\\[/email\\]", "<a href=\"mailto:\\1\">\\1</a>",$fusnewsm);
    $fusnewsm = eregi_replace("\\[email=([^\\[]*)\\]([^\\[]*)\\[/email\\]", "<a href=\"mailto:\\1\">\\2</a>",$fusnewsm);
    $fusnewsm = eregi_replace("(^|[>[:space:]\n])([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])([<[:space:]\n]|$)","\\1<a href=\"\\2://\\3\\4\" onclick=\"window.opon(this.href); return false\">\\2://\\3\\4</a>", $fusnewsm);
    $fusnewsm = preg_replace("/([\n >\(])www((\.[\w\-_]+)+(:[\d]+)?((\/[\w\-_%]+(\.[\w\-_%]+)*)|(\/[~]?[\w\-_%]*))*(\/?(\?[&;=\w\+%]+)*)?(#[\w\-_]*)?)/", "\\1<a href=\"http://www\\2\" onclick=\"window.opon(this.href); return false\">www\\2</a>", $fusnewsm);
    $fusnewsm = eregi_replace("\\[url\\]www.([^\\[]*)\\[/url\\]", "<a href=\"http://www.\\1\" onclick=\"window.open (this.href); return false;\">\\1</a>",$fusnewsm);
    $fusnewsm = eregi_replace("\\[url\\]([^\\[]*)\\[/url\\]","<a href=\"\\1\" onclick=\"window.open (this.href); return false;\">\\1</a>",$fusnewsm);
    $fusnewsm = eregi_replace("\\[url=([^\\[]*)\\]([^\\[]*)\\[/url\\]","<a href=\"\\1\" onclick=\"window.open (this.href); return false;\">\\2</a>",$fusnewsm);

  2. #2
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Le funzioni sono simili in molti aspetti, dovresti solo convertire l'espressione regolare in un formato compatible a PCRE.
    Quindi ci devono essere i delimitatori dell'espressione, gli escape ai caratteri speciali con un solo backslash e se nell'espressione utilizzi lo stesso carattere del delimitatore, devi fargli l'escape. Inoltre, con le preg_* puoi utilizzare i modificatori, ma trovi tutto sul manuale di php (sito ufficiale).

    Ti faccio un esempio, convertendo una tua espressione:
    Codice PHP:
    $fusnewsm = eregi_replace("\\[size=([^\\[]*)\\]([^\\[]*)\\[/size\\]","<span style=\"font-size:\\1\">\\2</span>",$fusnewsm);
    diventa:
    Codice PHP:
    $fusnewsm = preg_replace("#\[size=([^\[]*)\]([^\[]*)\[/size\]#i","<span style=\"font-size:\\1px;\">\\2</span>",$fusnewsm);
    In questo caso ho utilizzato l'asterisco (#) come delimitatore, giusto per comodità. Puoi usare qualsiasi carattere, l'importante è seguire le regole che ho scritto prima. Anche se in questo caso, sarebbe più opportuno usare una regexp del tipo:
    Codice:
    #\[size=([1-9][0-9]*)\](.+?)\[/size\]#i
    (molto più corretta semanticamente)

    Se hai altri problemi, scrivi pure ;)
    Ultima modifica di javascripter : 04-11-2013 alle ore 13.28.03

  3. #3
    Guest

    Predefinito

    mi sembra di capire che anche eregi_replace usa il delimitatore. Leggo che \\ è diventato #\

    Quindi con eregi replace il delimitatore è \, mentre con preg_replace invece è # (infatti tu mi dici che "se nell'espressione utilizzi lo stesso carattere del delimitatore, devi fargli l'escape").

    Supponendo che la mia "intuizione" sia corretta (cioè che i delimitatori siano usati in entrambe le righe di codice) basterebbe cambiare eregi_replace con preg_replace.

    Qualcosa non mi quadra..

    PS: conoscendomi, probabilmente ci metterò un pò a capire e vorrei evitare di trasformare la discussione in una chat a 2.

    Hai qualche link dove la cosa è spiegata nella maniera più elementare possibile per favore?

  4. #4
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    ereg* non utilizza i delimitatori dell'espressione, è proprio questa la differenza sostanziale...
    Se te la cavi con l'inglese, qualche suggerimento utile è qui: http://stackoverflow.com/questions/6...to-preg-in-php

  5. #5
    Guest

    Predefinito

    Capito, grazie.

Tags for this Thread

Regole di scrittura

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