- Home
- Categorie
- Coding e Sistemistica
- PHP
- Togliere gli spazi bianchi intermedi: è possibile?
-
Togliere gli spazi bianchi intermedi: è possibile?
Ho un problema che si verifica quando il form viene compliato una seconda volta e in uno dei campi si inseriscono le stesse parole ma staccate da un numero diverso di spazi bianchi intermedi.
Per evitare che il form sia compilato due volte con stessi dati, prima di inserire un nuovo record nella tabella si esegue un controllo.
Faccio una verifica se il valore introdotto nel campo è già presente nel database. Se già inserito, rimando a pagina di errore. Se non presente si inserisce un nuovo record.
PROBLEMA
Quando si complia il campo di un form e con la barra spaziatrice si inseriscono tra le parole 2 o più spazi bianchi, il valore del campo risulta diverso, e di conseguenza si aggiunge un nuovo record nella tabella, cosa che non dovrebbe accadere....Faccio un esempio pratico, se nel campo si inseriscono i valori:
Pizzeria Bellavista (separate da 1 spazio bianco)
Pizzeria Bellavista (separate da 2 spazi bianchi)
Pizzeria Bellavista (separate da 3 spazi bianchi)
Pizzeria Bellavista (separate da 4 spazi bianchi)questi sono considerati diversi e vengono aggiunti nella tabella
io vorrei che fossero considerati tutti uguali e non diversi e lo spazio bianco interno fosse ridotto ad 1 soloPer prevenire simili errori in fase di data entry si è soliti usare le funzioni ltrim e rtrim ma queste eliminano solo gli spazi bianchi all'inizio ed alla fine
Mi chiedevo se esiste una funzione analoga che riduce gli spazi bianchi intermedi ad 1 solo spazio togliendo tutti quelli superflui
Esiste?
Un saluto
-
Non mi ricordo e non posso provare ora, ma credo che puoi risolvere facendo:
$testo_pulito = implode(" ", explode(" ",$testo_da_pulire));
-
@CZero said:
Non mi ricordo e non posso provare ora, ma credo che puoi risolvere facendo:
$testo_pulito = implode(" ", explode(" ",$testo_da_pulire));
Ciao e grazie per la risposta,
No... purtroppo non va
il valore del campo lo ripulisco in questo modo prima del confronto:
$nome = ltrim(rtrim(strip_tags($_POST['nome'])));
dietro tuo consiglio ho poi messo
$nome_pulito = implode(" ", explode(" ",$nome));
ma il risultato non cambia.... gli spazi bianchi intermedi restituiscono sempre valori diversi e non confrontabili
Qualcuno si è trovato in questa situazione e sa come fare?
-
@Redart said:
Ciao e grazie per la risposta,
No... purtroppo non va
il valore del campo lo ripulisco in questo modo prima del confronto:
$nome = ltrim(rtrim(strip_tags($_POST['nome'])));
dietro tuo consiglio ho poi messo
$nome_pulito = implode(" ", explode(" ",$nome));
ma il risultato non cambia.... gli spazi bianchi intermedi restituiscono sempre valori diversi e non confrontabili
Qualcuno si è trovato in questa situazione e sa come fare?
Puoi risolvere con le espressioni regolari.
$testo_parsato = preg_replace("\040{2,}", "\040", $testo_da_parsare);
Dovrebbe andare, non ho testato niente
-
io ho fatto così:
$testo=str_replace(' ',' ',$testo_da_parserare);
-
@piccolosocrate said:
io ho fatto così:
$testo=str_replace(' ',' ',$testo_da_parserare);
Questo non va perchè tu a priori non sai quanti spazi bianchi ci sono...
-
Ciao,
e grazie per l'interessamento a quelli che hanno postato (PaTeR, CZero, piccolosocrate)
purtroppo i suggerimenti non hanno dato frutti
[LEFT]quello di piccolosocrate funziona benissimo
ma serve a sostituire solo il doppio spazio con uno solo[/LEFT][LEFT]non sò se c'è un modo per rendere la funzione più generale
[LEFT]per spazi >= a 2[/LEFT][LEFT]ho provato a modificarla con[/LEFT]
[LEFT]str_replace('\040{2,}','\040',$testo_da_parsare);[/LEFT]
ma nulla di nulla, non funziona
che dite, si può modificare???
[/LEFT]
il codice complicatissimo di PaTeR in teoria dovrebbe andare ma
anche questo non funzionase ho capito bene la funzione** preg_replace**
esegue una ricerca ed una sostituzione con le espressioni regolaripreg_replace (espressione_regolare, sostituto, testo)
La funzione ricerca in testo i criteri impostati in espressione_regolare.
e li sostituisce con sostituto.\040
è modo per indicare uno spazio{2,}
dovrebbe significare
che quanto scritto prima si ripete da 2 volte ad infinitoquindi, il tutto dovrebbe significare cerca all'interno di $testo_da_parsare gli spazi bianchi ripetuti 2 o più volte e sostituiscili con 1 solo spazio bianco
purtoppo non va
ho fatto dei tentativi e ho provato anche a sostituire \040 con \40
in quanto avevo letto che sono equivalenti.... ma nulla è cambiatoho provato anche a sostituire i doppi apici " " con quelli singoli ' '
dopo aver visto il suggerimento di piccolosocrate,
ma mi rida l'errorequalcun'altro ha suggerimenti?
Un saluto
-
Scusa, come al solito ho dimenticato i delimitatori... Li dimentico sempre
modifica così il codice:
$b = preg_replace('#\040{2,}#', '\040', $a);
$a è il tuo testo. $b è il testo risultante.
-
@PaTeR said:
Scusa, come al solito ho dimenticato i delimitatori... Li dimentico sempre
modifica così il codice:
$b = preg_replace('#\040{2,}#', '\040', $a);
$a è il tuo testo. $b è il testo risultante.
Niente scuse PaTeR.........
solo grazie per la disponibilitàmi spiace deluderti ma purtroppo non và
sono stato attento a copiarlo per bene ma proprio non funziona$nome_pulito = preg_replace('#\040{2,}#', '\040', $nome);
la soluzione è più ardua di quanto pensassi
Ciao
-
@Redart said:
Niente scuse PaTeR.........
solo grazie per la disponibilitàmi spiace deluderti ma purtroppo non và
sono stato attento a copiarlo per bene ma proprio non funziona$nome_pulito = preg_replace('#\040{2,}#', '\040', $nome);
la soluzione è più ardua di quanto pensassi
Ciao
A me funziona... guarda qui ( ho levato il secondo \040 per mettere uno spazio) :
http://phoenixdivision.byethost16.com/aaa.phpNaturalmente non si nota niente dal browser, devi vedere il sorgente della pagina.
-
allora senza impelagarti in script atroci con tre righe risolvi il problema....
$testo=str_replace(' ',' ',$testo_da_parserare);
$testo=str_replace(' ',' ',$testo);
$testo=str_replace(' ',' ',$testo);
-
@piccolosocrate said:
allora senza impelagarti in script atroci con tre righe risolvi il problema....
$testo=str_replace(' ',' ',$testo_da_parserare);
$testo=str_replace(' ',' ',$testo);
$testo=str_replace(' ',' ',$testo);
Non è script atroce quello che ho fatto... è script funzionante. Questo è un pò di codice in extremis, ma se funziona... tanto bene per lui...
-
$testo=str_replace(' ',' ',$testo_da_parserare);
$testo=str_replace(' ',' ',$testo);
$testo=str_replace(' ',' ',$testo);Dai. E' osceno. E se gli spazi sono 8?
Quoto pater ed aggiungo che potresti crearti una funziona apposta e passargli i valori.
Una cosa del tipo:
function rimuovispazi($testo,$trim=true) {
$testo=preg_replace("#\s{2,}#", " ", $testo);
return $testo=($trim)?trim($testo):$testo;
}che chiamerai con:
$text=rimuovispazi($vecchiotesto); se vuoi anche togliere gli spazi ad inizio e fine riga o
$text=rimuovispazi($vecchiotesto,false); se non vuoi
-
Ciao,
ho risolto con il codice di PaTeR (grazie
$nome_pulito = preg_replace('#\040{2,}#', ' ', $nome);
è bastato cancellare il secondo \040 ed inserire uno spazio vuoto è tutto ha funzionato
grazie mille
Buona giornata