2013-06-17 61 views
8

Trong trang web của tôi, người dùng có thể đặt một URL trong hồ sơ của họ.Làm cách nào để buộc liên kết HTML trở nên tuyệt đối?

URL này có thể là http://www.google.com hoặc www.google.com hoặc google.com.

Nếu tôi chỉ chèn mã PHP của mình <a href="$url">$url</a>, liên kết không phải lúc nào cũng tuyệt đối.

Làm cách nào để buộc thẻ a trở nên tuyệt đối?

+2

Đảm bảo rằng nó luôn được đặt trước bằng 'http: //' (hoặc '//' cho liên kết giao thức tương đối) –

+1

Bạn có thể thử sử dụng window.location Nhưng tốt nhất là xác thực đầu vào của người dùng. Nhắc họ cung cấp url hợp lệ. – ysrb

Trả lời

5

Sử dụng một giao thức, tốt http: //

<a href="http://www.google.com">Google</a> 

hỏi người dùng nhập vào url trong định dạng này, hoặc nối http: // nếu không muốn nói thêm.

3

Gần đây tôi đã phải làm điều tương tự.

if (strpos($url, 'http') === false) { 
    $url = 'http://' .$url; 
} 

Về cơ bản, nếu url không chứa 'http' thêm nó vào phía trước của chuỗi (tiền tố).

Hoặc chúng ta có thể làm điều này với RegEx

$http_pattern = "/^http[s]*:\/\/[\w]+/i"; 

if (!preg_match($http_pattern, $url, $match)){ 
    $url = 'http://' .$url; 
} 

Cảm ơn bạn @JamesHilton để chỉ ra một sai lầm. Cảm ơn bạn!

+1

Điều này sẽ luôn trả về false vì nếu nó tìm http ở đầu url $, nó sẽ trả về 0 vì vị trí của chuỗi 'http' bắt đầu từ chỉ mục 0. 0 được coi là falsey trong câu lệnh if, vì vậy bạn cần sử dụng toán tử === để thay thế. –

+0

@JamesHilton Aw jeez thật đáng xấu hổ! Cố định, cảm ơn bạn! – StephanieQ

+0

Có lẽ nó sẽ là một RegExp tốt hơn nếu bạn sử dụng: '"/^ https?: \/{2} \ w/i "' – eddy85br

6

Nếu bạn đặt trước URL với //, nó sẽ được coi là tuyệt đối. Ví dụ:

<a href="//google.com">Google</a>.

Hãy nhớ điều này sẽ sử dụng cùng một giao thức mà trang đang được phân phát (ví dụ: nếu URL trang của bạn là https://path/to/page thì URL kết quả sẽ là https://google.com).

+0

Bạn cũng nên đề cập rằng nếu URI tuyệt đối được chỉ định với hai dấu gạch chéo về phía trước, thì giao thức của trang hiện tại sẽ được sử dụng khi kết nối với url hồ sơ, tức là https://yoursite.net sẽ dẫn đến https://google.com, trong khi http://yoursite.net sẽ dẫn đến http: // google.com –

+0

Có, phù hợp với trường hợp trong câu hỏi. Bằng cách liên kết của bạn bị hỏng (phân tích cú pháp). –

+0

Điều này không có tác dụng nếu giao thức trang web của bạn khác với giao thức url. Nếu trang web của bạn là https thì url http sẽ không hoạt động vì nó sẽ được cung cấp https thay thế. – DeepBlue