modificare url

Ciao gianni sto utilizzando mod rewrite per pulire gli url,

ho scritto una funzione che genera url di questo tipo

titolo_con_gli_spazi_separati_dall_underscore_1.html

dove l'ultimo underscore separa dati inutili dall'id del contenuto in modo che sia leggebile ad un umano ma che faccia una corrispondenza numerica con il dato nel DB.

ora devo sostituire tutti i caratteri che non siano lettere e numeri con uno spazio vuoto ( cioè eliminando completamente il carattere ):

ciao come stai?

diventa :

ciao_come_stai_1

saluti dall'aldilà <- ehehe qui non so che fare con i caratteri letterali accentati  :P

saliti dall'oltretomba con affeto (  :2funny: )

diventa:

saluti_dall_oltretomba_con_affetto

come devo fare?

 :bye:

inviato 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

queste conversioni vanno fatte nell' .htaccess oppure in PHP?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Gli URL vengono modificati da php poi vengono passati al .htacces per la conversione dell'URL

perchè si può fare con .htacces?!

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Si, se ti stai riferendo alla conversione dell'URL richiesto dal brower in URL effettivamente servito dal server. Si fa con la direttiva RewriteRule. Mai vista?

risposto 9 anni fa
Gianni Tomasicchio
modificato 9 anni fa
X 0 X

che confusione :D

in pratica uso rewiterule per creare un url da : index.php?do=contents&page=0&contentid=1

in: /contents/[page_num/]titolo_contenuto_1.html

in pratica titolo del contenuto deve essere sostituito con titolo_del_contenuto , mi segui?

ma è solo una cosa indicativa potrei fare benissimo /contents/[page_num/]/1.html ma sarebbe stupido  -.-

allora vorrei fare queste operazioni su una stringa utilizzata come titolo:

rimozione e sostituzione di caratteri accentati con corrispettivo senza accento,

sostituzione degli spazi in underscore ( _ ),

taglio stringa a 30 caratteri e farla finire dopo una parola cioè senza tagliare le parole

es:

non

comunisti_mangiano_i_bambini_1.html

non

 comunisti_mangiano_i_bam_1.html

ma bensì

comunisti_mangiano_1.html o qualcosa di simile

per il problema del taglio non è molto importante potrei anche mettere tutto il titolo,quello che mi interessa è fare le sostituzioni .

quelle che non so fare è cercare e sostituire molte volte diversi caratteri, perchè se fosse uno solo basta fare str_replace(' ','_',$stringa)

e se invece vorrei sostituire ò à è  ' " non so come fare

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

ma attualmente cosa hai messo nell'.htacces?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
RewriteEngine On
RewriteCond %{REQUEST_URI} !\.(css|jpg|gif|png|jar|js|html|htm|php)$
RewriteRule ^lang_([a-zA-Z0-9]+)/$                   index.php?setnewlang=$1 [L]
RewriteRule ^help/([a-zA-Z0-9]+)/$                   index.php?do=help#$2 [L]
RewriteRule ^catalog/page_([0-9]+)/$                index.php?do=catalog&page=$1 [L]
RewriteRule ^contents/[a-zA-Z0-9_-]+_([0-9]+)\.html$    index.php?do=contents&id=$1&page=0 [L]
RewriteRule ^contents/page_([0-9]+)/[a-zA-Z0-9_-]+_([0-9]+)\.html$    index.php?do=contents&id=$2&page=$1 [L]
RewriteRule ^search/([0-9]+)/$                     index.php?do=search&queryid=$1&page=0 [L]
RewriteRule ^search/page_([0-9]+)/([0-9]+)/$         index.php?do=search&queryid=$2&page=$1 [L]
risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

quindi la trasformazione da URL richiesti dal browser ad URL serviti dal server già c'è! Li hai scritti tu?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

essi :) e chi se no?!

vorrei modificare solo gli url per i contenuti in modo che siano leggibili e che non generino caratteri %20 ecc... modificando spazi in _ ( fatto ) e caratteri accentati con lettera senza accento ( à => a,è => e ec )

mi sono spiegato?

Gianni ho un problema : sul forum in code mi escono delle strane linee dopo lo scorrimento della pagina , anche a te?

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

perché non usi la classica str_replace?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

funziona per le sostituzioni di caratteri diversi?

cioè potrei usare un array con le sostituzioni e un array con i caratteri da sostituire e poi cercare nella stringa se è presente il valore dell'array  da sostituire e poi sostituirlo con il rispettivo carattere?

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

funziona per le sostituzioni di caratteri diversi?

cioè potrei usare un array con le sostituzioni e un array con i caratteri da sostituire e poi cercare nella stringa se è presente il valore dell'array  da sostituire e poi sostituirlo con il rispettivo carattere?

Si. inutile dirti che sul manuale trovi spiegato tutto.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

grazie,scusa per l'inutilità del topic, ma sono in un momento buio :death:

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Uffa Gianni guarda qui :

      if(substr($replace,-1,1) == '_'){
         $replace = substr($replace,-1,1);
      }

dovrebbe controllare se l'url ha più di un _ ed eliminarli ... ma se provo non ritorna nulla e mi ritrovo solo con _ inserito da apache : _1.html ???

come posso fare?

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

risolto in questo modo:

      $lenght = strlen($replace)-1;
      
      while(substr($replace,$lenght) == '_'){
         if(substr($replace,$lenght) == '_'){
            $replace = substr($replace,0,$lenght);
         }
         $lenght--;
      }   

è corretto come metodo?

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Non ho capito che tipo di sostituzione vuoi fare. hai detto che vuoi controllare se nella stringa c'è più di un "_". Consecutivi? All'inizio della stringa oppure ovunque?

Con cosa devono essere sostituiti? Con un unico "_"?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

si ho risolto in parte ora li elimina alla fine, ma io vorrei fare in modo che _ consecutivi siano eliminati e ce ne sia solo uno ( in qualsiasi parte deltesto non solo alla fine o all'inizio )

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

prova così:

$testo = preg_replace('/_{2,}/','_',$testo);

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda