2010-04-13 29 views
18

Làm cách nào để thay thế dấu cách và dấu gạch ngang khi chúng xuất hiện cùng với dấu gạch ngang trong PHP?Thay thế tất cả dấu cách và ký hiệu đặc biệt bằng dấu gạch ngang trong URL bằng cách sử dụng ngôn ngữ PHP

ví dụ dưới đây là URL của tôi

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

Trong này, tôi muốn thay thế tất cả các ký tự đặc biệt với dấu gạch ngang trong PHP. Trong URL đã có một dấu gạch ngang sau "ban công". Nếu tôi thay thế dấu gạch ngang bằng một ký tự đặc biệt, thì nó sẽ trở thành hai dấu gạch ngang vì đã có một dấu gạch ngang trong URL và tôi chỉ muốn 1 dấu gạch ngang.

+0

các char đặc biệt là gì? – codaddict

+0

Bạn muốn url của mình trở thành gì? 'http: // kjd.case.150/1-BHK-Ban-700-sqft-spaciou-apartmetn-Bandra-West'? – Eric

Trả lời

2

Nếu có thể có tối đa một dấu cách xung quanh dấu gạch ngang, bạn có thể sử dụng câu trả lời bằng John. Nếu có thể có nhiều hơn một không gian bạn có thể thử sử dụng preg_replace:

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

này sẽ thay thế ngay cả một - không được bao quanh với bất kỳ không gian với - !!

Để làm cho nó hiệu quả hơn một chút bạn có thể làm:

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

Bây giờ điều này sẽ đảm bảo một - có ít nhất một không gian xung quanh nó trong khi nó được thay thế.

38

Tôi muốn nói rằng bạn có thể muốn theo cách khác. Không phải "dấu cách" nhưng mọi ký tự không phải chữ và số. Bởi vì có thể có các nhân vật khác, không được phép trong URL (+ dấu, ví dụ, được sử dụng như một sự thay thế không gian)

Vì vậy, để thực hiện một url hợp lệ từ một văn bản dạng tự do

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

Không phải là những dấu gạch chéo, thay vì dấu chấm than? – Eric

+4

Bạn phải cắt bỏ tên miền trước, nếu không bạn sẽ mất dấu chấm. – Eric

+0

hoạt động hoàn hảo ... Cảm ơn – Chaitenya

2

này nên làm điều đó cho bạn

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

Áp dụng biểu thức chính quy này /[^a-zA-Z0-9]/, '-' mà sẽ thay thế tất cả các ký tự không tự chữ và số với -. Lưu trữ nó trong một biến và một lần nữa áp dụng biểu thức chính quy này /\-$/, '' mà sẽ thoát khỏi ký tự cuối cùng.

0

lốp cũ của nó nhưng để giúp một số một, sử dụng chức năng này:

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

nó sẽ trở lại bạn một url an toàn chuỗi

+0

Eregi thay thế không được dùng nữa http://php.net/manual/fr/function.eregi-replace.php –

Các vấn đề liên quan