-
Functie php SEF urls
Salut, folosesc functia de mai jos pt a-mi transforma url-urile in functie de titlul paginii insa am o problema cand fraza se termina cu semne de punctuatie gen: "Cel mai tare!". In loc de "!" imi pune "-"... /cel-mai-tare-.html
Cod PHP:
function urlizare($var) {
$var = ereg_replace("[^A-Za-z0-9]", " ", $var);
$var = str_replace(" ", "-", $var);
$var = str_replace(" - ", "-", $var);
$var = str_replace("--", "-", $var);
$var = str_replace("--", "-", $var);
$var = strtolower($var);
return $var;
-
Cea mai simpla (nu neaparat cea mai buna) solutie ar fi dupa mine sa transformi ! si . in "":
$var = str_replace("!", "", $var);
$var = str_replace(".", "", $var);
$var = str_replace("?", "", $var);
Asa babeste... sunt sigur ca ceilalti iti vor oferi o solutie mult mai profesionala :) dar merge si asta ca solutie de criza... (zic eu)
-
Pai sa fie mai general, dupa ce se fac inlocuirile de caracter, si rezulta "cel-mai-tare-" de exemplu, se poate verifica daca prima si ultima litera sunt diferite de [a-z] sau [0-9], si atunci se elimina.
Ai putea face ceva de genul
Sa zicem ca $rezultat = 'cel-mai-tare-';
$prima_litera = substr( $rezultat, 0, 1);
$ultima_liter = substr( $rezultat, -1, 1 );
if( !ereg("^A-Za-z0-9]", $ultima_litera ) ) $rezultat = substr($rezultat,0,-1);
if( !ereg("^A-Za-z0-9]", $prima_litera ) ) $rezultat = substr($rezultat,1);
Cam asta ar fi ideea.
-
trim(-) oare? imi dau si eu cu parerea :)
-
O metoda mai simpla ar fi asa:
Cod PHP:
function rewrite($string){
$caractere = array(
' ' => '-',
' - ' => '-',
'--' => '-',
'!' => '',
'.' => '',
',' => '',
'?' => '',
"'" => ''
);
foreach($caractere as $k => $v){
$string = str_replace($k,$v,$string);
}
return $string;
}
Daca vrei ceva mai mult decat atat spune. Bafta.
LE:
@haos: trim nu face altceva decat sa elimine spatiile albe (si alte caractere) dintr-un string, si anume, de la inceput si la sfarsit.
-
Poate te ajuta asa ceva:
Cod PHP:
<?php
$testString = "Cel mai tare!";
$result = str_replace(" ","-",trim(preg_replace("/[^a-zA-Z0-9]+/"," ",trim(strtolower($testString))))) . ".html";
echo $result;
?>
-
incearca
uite o functie pe care o folosesc mereu:
Cod PHP:
function clean_url($text)
{
$text=strtolower($text);
$code_entities_match = array( '"' ,'!' ,'@' ,'#' ,'$' ,'%' ,'^' ,'&' ,'*' ,'(' ,')' ,'+' ,'{' ,'}' ,'|' ,':' ,'"' ,'<' ,'>' ,'?' ,'[' ,']' ,'' ,';' ,"'" ,',' ,'.' ,'_' ,'/' ,'*' ,'+' ,'~' ,'`' ,'=' ,' ' ,'---' ,'--','--');
$code_entities_replace = array('' ,'-' ,'-' ,'' ,'' ,'' ,'-' ,'-' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'-' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'' ,'-' ,'' ,'-' ,'-' ,'' ,'' ,'' ,'' ,'' ,'-' ,'-' ,'-','-');
$text = str_replace($code_entities_match, $code_entities_replace, $text);
return $text;
}
-
Hai sa ma bag si eu in seama.
In toate cazurile de mai sus putem ajunge in sitatii neplacute.
De exemplu: nu pot da replace la '!' cu '' pentru ca '!' poate fi la mijlocul textului.
Deasemenea, in alte cazuri, putem ajunge sa avem '---text-de-url---' si un singur replace nu ne ajuta.
Cea ma buna solutie de trim ramane trim($str, $chr) :) si face trim global la toate instantele $chr .
Eu folosesc o functie cu o singura linie de cod:
Cod PHP:
function doStringToRewriteUrl ($sString){
return strtolower(trim(preg_replace("/[^0-9a-zA-Z]+/", "_", $sString),"_"));
}
O ultima observatie: eu generez stringul pentru mod_rewrite la adaugarea unei inregistrari in baza de date si nu la afisare din 2 motive:
1. o operatie in minus la afisare
2. il generez in timp ce se completeaza titlul articolului si userul il poate edita daca doreste.