2010-11-22 39 views
5

Tôi muốn tạo chuỗi như URL thân thiện với SEO. Tôi muốn nhiều không gian trống được loại bỏ, không gian duy nhất được thay thế bằng dấu gạch ngang (-), sau đó strtolower và không cho phép ký tự đặc biệt.Làm cách nào để thay thế một hoặc nhiều khoảng trắng liên tiếp bằng một ký tự đơn?

Cho rằng tôi hiện đang mã như thế này:

$string = htmlspecialchars("This Is The String"); 
$string = strtolower(str_replace(htmlspecialchars((' ', '-', $string))); 

Đoạn mã trên sẽ tạo ra nhiều dấu gạch ngang. Tôi muốn loại bỏ nhiều không gian đó và thay thế nó chỉ bằng một không gian. Trong ngắn hạn, tôi đang cố gắng để đạt được URL thân thiện với SEO như chuỗi. Tôi phải làm nó như thế nào?

+0

Related: http://stackoverflow.com/questions/741553/how-can-i-convert-two-or-more-dashes-to-singles-and-remove-all-dashes-at-the-begi , http://stackoverflow.com/questions/4051889/regular-expression-any-text-to-url-friendly-one, et al. – Gumbo

Trả lời

18

Bạn có thể sử dụng preg_replace để thay thế bất kỳ chuỗi ký tự khoảng trắng với một dấu gạch ngang ...

$string = preg_replace('/\s+/', '-', $string); 
  • Các dấu gạch chéo bên ngoài là delimiters cho mô hình - họ chỉ cần đánh dấu nơi mô hình bắt đầu và kết thúc
  • \ s khớp với bất kỳ whitespace character
  • + khiến thành phần trước đó là match 1 or more times. Theo mặc định, đây là 'tham lam' vì vậy nó sẽ ăn nhiều trận đấu liên tiếp nhất có thể.
  • Xem trang hướng dẫn trên PCRE syntax để biết thêm chi tiết
+0

cảm ơn bạn đã phản hồi, tôi sẽ đánh giá cao nếu bạn có thể giải thích cho tôi thông số đầu tiên trong hàm thực sự làm gì. –

+1

cảm ơn Paul, tôi hiểu rồi. tôi phải học thêm về biểu thức chính quy. –

+0

Câu trả lời tuyệt vời Paul. Tôi có thể hỏi, làm thế nào để bạn phù hợp với 2 hoặc nhiều không gian? –

0
echo preg_replace('~(\s+)~', '-', $yourString); 
0

Những gì bạn muốn được "slugify" một chuỗi. Hãy thử tìm kiếm trên SO hoặc google trên "php slugify" hoặc "php slug".

+0

Anh ấy đang tìm câu trả lời trên stackoverflow. Google không phải là câu trả lời. -1 – ALH

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