Torna indietro   AlterVista | Spazio web gratis, hosting free php mysql > Supporto > PHP, MySql e file database

Rispondi
 
LinkBack Strumenti discussione Modalità visualizzazione
  #1 (permalink)  
Vecchio 06-11-2009, 18.28.27
L'avatar di miki92
AlterGuru
 
Data registrazione: 21-04-2007
Residenza: Procida (NA)
Messaggi: 2,195
Invia un messaggio via MSN a miki92 Manda un messaggio tramite Skype™ a miki92
Predefinito Sostituire determinato testo con una funzione

Buonasera,

necessito di sostituire un determinato testo con una determinata funzione, il codice che ho buttato giù è il seguente:

Codice PHP:
<?php

error_reporting
(E_ALL);

function 
uno($e){ return "UNO: <strong>".$e."</strong><br /><br />"; }
function 
due($a){ return "DUE: <strong>".$a."</strong><br /><br />"; }

$string file_get_contents("uno.txt");

$string preg_replace("{(.*)}",uno("\\1"),$string);
$string preg_replace("{{([0-9]+)}}",due("\\1"),$string);

echo 
$string;

?>
Il file uno.txt contiene un intero codice HTML con all'interno due "parole particolari": {IMMAGINE} e {{356}}.

Ciò che io voglio fare è sostituire a:

{IMMAGINE} -> la funzione uno()
{{356}}] -> la funzione due()

In pratica necessito di sostituire il contenuto di una o due graffe ad una determinata funzione che restituirà una valore tra esso comprese.

E' una specie di BBCode...ma che verrà usato in modo differente...l'output di quel codice è il seguente:

Codice:
UNO: 

UNO: 

UNO: 

UNO: 

UNO: 

UNO: 

UNO: 

UNO: 

UNO: 

UNO: 

UNO: 

UNO: 

UNO: 

UNO: 

UNO: 

UNO: 

UNO: 

UNO: 

UNO: {IMMAGINE}

{DUE: 356

} 

UNO: 

UNO: 

UNO: 

UNO: 

UNO: 

UNO: 

UNO: 

UNO:
Naturalmente non è quello che io voglio perchè chissà quale errore ho commesso (ho studiato la guida, ma per me in alcuni punti diventa un po' più complesso seguire quanto spiegato).

Mi sapreste aiutare a risolvere?
__________________

"Non è mai troppo tardi per realizzare il tuo sogno." - Hilary Duff
"L'informatica è un casino di potenzialità!" - Miki92
Rispondi citando
  #2 (permalink)  
Vecchio 06-11-2009, 18.33.10
L'avatar di ageofempiresgif
Utente
 
Data registrazione: 04-09-2009
Messaggi: 151
Predefinito

Prova a invertire le funzioni di match ("1 graffa" è un sottocaso di "2 graffe"):
Codice PHP:
$string preg_replace("{{([0-9]+)}}",due("\\1"),$string);
$string preg_replace("{(.*)}",uno("\\1"),$string); 
__________________
Age Of Empires GIF Creator & Archive
Vuoi giocare online a Age of Empires The Conquerors? -> Usa Voobly !! (MSN Zone non lo supporta più dal 19 giugno 2006)
Il mio clan di The Conquerors -> Rifugio dei Conquerors
Il mio stato su Xfire Live Video -> Unreal Tournament 2004
Facebook MMORPG
Rispondi citando
  #3 (permalink)  
Vecchio 06-11-2009, 18.48.43
L'avatar di miki92
AlterGuru
 
Data registrazione: 21-04-2007
Residenza: Procida (NA)
Messaggi: 2,195
Invia un messaggio via MSN a miki92 Manda un messaggio tramite Skype™ a miki92
Predefinito

Il risultato non cambia.
__________________

"Non è mai troppo tardi per realizzare il tuo sogno." - Hilary Duff
"L'informatica è un casino di potenzialità!" - Miki92
Rispondi citando
  #4 (permalink)  
Vecchio 06-11-2009, 19.32.08
L'avatar di programmazioned
Utente attivo
 
Data registrazione: 25-03-2008
Residenza: Foligno
Messaggi: 315
Predefinito

Codice PHP:
$string preg_replace("#\{\{([0-9]+)\}\}#e"'due(\\1)'$string); 
Le espressioni regolari sono sbagliate.

Ciao!

P.S: mi scuso per il doppio post. Non volevo bumpare, avevo capito male il problema.
__________________

Ultima modifica di programmazioned : 06-11-2009 alle ore 19.33.35
Rispondi citando
  #5 (permalink)  
Vecchio 06-11-2009, 19.46.06
L'avatar di miki92
AlterGuru
 
Data registrazione: 21-04-2007
Residenza: Procida (NA)
Messaggi: 2,195
Invia un messaggio via MSN a miki92 Manda un messaggio tramite Skype™ a miki92
Predefinito

Ottimo funziona, ho provato a rendere un po' più complesso il codice HTML per vedere se funziona correttamente come voglio io o se c'è qualche problema, inoltre volevo testare se funziona anche quando si presentano più casi.

Il codice nel file uno.txt è il seguente:
Codice:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Senza nome 1</title>
</head>

<body>
{IMMAGINE} <br /><br /> {{356}}

{ABC} <br /> {6564} <hr /> {{IMAG}} <br /> {{131}}
</body>

</html>
L'errore che PHP mi riporta è:
Codice:
Parse error: syntax error, unexpected '}' in C:\www\root12\bb.php(12) : regexp code on line 1

Fatal error: preg_replace() [<a href='function.preg-replace'>function.preg-replace</a>]: Failed evaluating code: uno(ABC} &lt;br /&gt; {6564} &lt;hr /&gt; {{IMAG}) in C:\www\root12\bb.php on line 12
__________________

"Non è mai troppo tardi per realizzare il tuo sogno." - Hilary Duff
"L'informatica è un casino di potenzialità!" - Miki92
Rispondi citando
  #6 (permalink)  
Vecchio 06-11-2009, 20.04.28
L'avatar di programmazioned
Utente attivo
 
Data registrazione: 25-03-2008
Residenza: Foligno
Messaggi: 315
Predefinito

Posta il nuovo script.

Ciao!
__________________
Rispondi citando
  #7 (permalink)  
Vecchio 06-11-2009, 20.06.25
L'avatar di miki92
AlterGuru
 
Data registrazione: 21-04-2007
Residenza: Procida (NA)
Messaggi: 2,195
Invia un messaggio via MSN a miki92 Manda un messaggio tramite Skype™ a miki92
Predefinito

Già scusa dimenticavo :

Codice PHP:
<?php

error_reporting
(E_ALL E_NOTICE);

function 
uno($e){ return "IMMAGINE: <strong>".$e."</strong><br /><br />"; }
function 
due($a){ return "NUMERO: <strong>".$a."</strong><br /><br />"; }

$string file_get_contents("uno.txt");

$string preg_replace("#\{\{([0-9]+)\}\}#e"'due(\\1)'$string);  

$string preg_replace("#\{(.*)\}#e"'uno(\\1)'$string);  

echo 
$string;

?>
__________________

"Non è mai troppo tardi per realizzare il tuo sogno." - Hilary Duff
"L'informatica è un casino di potenzialità!" - Miki92
Rispondi citando
  #8 (permalink)  
Vecchio 06-11-2009, 20.10.43
L'avatar di programmazioned
Utente attivo
 
Data registrazione: 25-03-2008
Residenza: Foligno
Messaggi: 315
Predefinito

(.*) dovrebbe essere ([A-Z]+) .

Ciao!
__________________
Rispondi citando
  #9 (permalink)  
Vecchio 06-11-2009, 20.27.36
L'avatar di miki92
AlterGuru
 
Data registrazione: 21-04-2007
Residenza: Procida (NA)
Messaggi: 2,195
Invia un messaggio via MSN a miki92 Manda un messaggio tramite Skype™ a miki92
Predefinito

Ma non mi servono solo lettere, il nome potrebbe contenere anche trattini, underscore, e numeri.
__________________

"Non è mai troppo tardi per realizzare il tuo sogno." - Hilary Duff
"L'informatica è un casino di potenzialità!" - Miki92
Rispondi citando
  #10 (permalink)  
Vecchio 06-11-2009, 20.37.28
L'avatar di dreadnaut
Super Moderatore
 
Data registrazione: 22-02-2004
Messaggi: 2,699
Invia un messaggio via MSN a dreadnaut
Predefinito

Usa \w che equivale a [a-zA-Z_], o infine leggiti la guida delle regexp per sapere quali classi predefinite esistono.
__________________
chezDreadnaut - dailyDreadnaut
"Un <BR/> è impuro, punto."
"I <P>&nbsp;</P> non hanno diritto di esistere."
Rispondi citando
  #11 (permalink)  
Vecchio 06-11-2009, 23.01.40
L'avatar di miki92
AlterGuru
 
Data registrazione: 21-04-2007
Residenza: Procida (NA)
Messaggi: 2,195
Invia un messaggio via MSN a miki92 Manda un messaggio tramite Skype™ a miki92
Predefinito

Grazie dreadnaut, per ora ho deciso di fare in questo modo:

Codice PHP:
function php($id){ $a mysql_fetch_array(mysql_query("SELECT * FROM codici WHERE id = '".$id."'")); return "<div class=\"codice\">".nl2br($a['codice'])."</div>"

$body preg_replace("#\{([0-9]+)\}#e",'php(\\1)',htmlspecialchars_decode($a['post']));
echo 
$body
Facendo così il codice si vede bene e formattato, però io vorrei che il codice fosse "colorato" pertanto dovrei utilizzare highlight_string():

Codice PHP:
function php($id){ $a mysql_fetch_array(mysql_query("SELECT * FROM codici WHERE id = '".$id."'")); return "<div class=\"codice\">".highlight_string($a['codice'])."</div>"

$body preg_replace("#\{([0-9]+)\}#e",'php(\\1)',htmlspecialchars_decode($a['post']));
echo 
$body
Solo che facendo così:

1. Il codice non si "colora".
2. Il codice non si formatta.
3. Non mi viene restituito il div con al suo interno il codice.

Come mai? Cosa sbaglio ora?
__________________

"Non è mai troppo tardi per realizzare il tuo sogno." - Hilary Duff
"L'informatica è un casino di potenzialità!" - Miki92
Rispondi citando
  #12 (permalink)  
Vecchio 07-11-2009, 14.35.34
L'avatar di programmazioned
Utente attivo
 
Data registrazione: 25-03-2008
Residenza: Foligno
Messaggi: 315
Predefinito

Passa true come secondo parametro di highlight_string().
__________________
Rispondi citando
  #13 (permalink)  
Vecchio 07-11-2009, 16.38.45
L'avatar di miki92
AlterGuru
 
Data registrazione: 21-04-2007
Residenza: Procida (NA)
Messaggi: 2,195
Invia un messaggio via MSN a miki92 Manda un messaggio tramite Skype™ a miki92
Predefinito

Non ci avevo pensato, però per comodità mia (e per altro uso) ho risolto con il controllo dell'output buffering.

Grazie ugualmente.
__________________

"Non è mai troppo tardi per realizzare il tuo sogno." - Hilary Duff
"L'informatica è un casino di potenzialità!" - Miki92
Rispondi citando
Rispondi

Strumenti discussione
Modalità visualizzazione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks are Attivato
Pingbacks are Attivato
Refbacks are Disattivato



Tutti gli orari sono GMT +1. Adesso sono le 05.53.30.