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 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

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

risposto 10 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 10 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 10 anni fa
Gianni Tomasicchio
modificato 10 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 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

ma attualmente cosa hai messo nell'.htacces?

risposto 10 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 10 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 10 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 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

perché non usi la classica str_replace?

risposto 10 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 10 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 10 anni fa
Gianni Tomasicchio
X 0 X

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

:bye:

risposto 10 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 10 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 10 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 10 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 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

prova così:

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

 :bye:

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