2010-04-13 16 views
18

Jak zamienić spacje i myślniki, gdy pojawiają się razem z tylko myślnikiem w PHP?Zastąp wszystkie spacje i symbole specjalne kreską w adresie URL za pomocą języka PHP

np poniżej jest mój adres URL

http://kjd.case.150/1 BHK+Balcony- 700+ sqft. spacious apartmetn Bandra Wes 

W tym chcę zastąpić wszystkie znaki specjalne z myślnikiem w PHP. W adresie URL jest już jeden myślnik po "balkonie". Jeśli zastąpię myślnik specjalnym znakiem, to stanie się to dwie kreski, ponieważ w adresie URL jest już jeden kreska i chcę tylko 1 myślnik.

+0

Jakie są specjalnym char? – codaddict

+0

Jaki jest twój adres URL? 'http: // kjd.case.150/1-BHK-Balcony-700-sqft-spaciou-apartmetn-Bandra-West'? – Eric

Odpowiedz

2

Jeśli może być maksymalnie jedna spacja wokół łącznika, możesz użyć odpowiedzi przez John. Gdyby mógł tam być więcej niż jedno miejsce można spróbować użyć preg_replace:

$str = preg_replace('/\s*-\s*/','-',$str); 

byłoby to zastąpienie nawet - nie otoczony spacji z - !!

Aby uczynić go nieco bardziej wydajny można zrobić:

$str = preg_replace('/\s+-\s*|\s*-\s+/','-',$str); 

Teraz byłoby to zapewnić - ma co najmniej jedną przestrzeń otaczającą go podczas jego wymiany.

38

Powiedziałbym, że możesz chcieć inaczej. Nie "spacje", ale każdy znak niealfanumeryczny. Ponieważ nie mogą być inne znaki niedozwolone w adresie URL (znak +, na przykład, który jest używany jako zamiennik spacja)

Tak więc, aby dokonać prawidłowego URL z tekstem free-form

$url = preg_replace("![^a-z0-9]+!i", "-", $url); 
+0

Czy nie powinny to być ukośniki, a nie wykrzykniki? – Eric

+4

Musisz najpierw odciąć nazwę domeny, inaczej stracisz punkty. – Eric

+0

działa idealnie ... Dzięki – Chaitenya

2

to powinien to zrobić dla ciebie

strtolower(str_replace(array(' ', ' '), '-', preg_replace('/[^a-zA-Z0-9 s]/', '', trim($string)))); 
1

Zastosuj tego wyrażenia regularnego /[^a-zA-Z0-9]/, '-' który zastąpi wszystkie non znaków alfanumerycznych z -. Zapisz go w zmiennej i ponownie zastosuj to wyrażenie regularne: /\-$/, '', które pozwoli uniknąć ostatniego znaku.

0

Jego stary bieżnik lecz pomoc kogoś, korzystania z funkcji:

function urlSafeString($str) 
{ 
    $str = eregi_replace("[^a-z0-9\040]","",str_replace("-"," ",$str)); 
    $str = eregi_replace("[\040]+","-",trim($str)); 
    return $str; 
} 

zwróci Ci bezpieczny ciąg url

+0

Eregi zamień jest przestarzałe http://php.net/manual/fr/function.eregi-replace.php –

Powiązane problemy