2011-08-30 35 views
6

Tôi có một trang web nơi người dùng có thể nhập nhận xét và mô tả. Tôi cũng cho phép họ nhập liên kết. Tôi sử dụng strip_tags với ngoại lệ cho các liên kết. Tôi cũng thêm rel="nofollow" thông qua string_replace đơn giản.Kiểm tra cú pháp liên kết của đầu vào của người dùng

Vấn đề là, nếu người dùng để lại báo giá kép ở cuối thẻ mở của họ, nó sẽ làm hỏng html. Bất kỳ đề xuất nào về cách kiểm tra hoặc sửa cú pháp liên kết không chính xác?

$comment = $_POST['comment'];
$comment = strip_tags($comment,"<a>");
$comment = str_replace('<a','<a rel="nofollow"',$comment);
$comment = mysql_real_escape_string($comment);

và khi xuất ra

$ comment = stripslashes ($ bình luận);

echo $ bình luận;

Vấn đề là khi người dùng thêm <a href="www.blah.com> và quên dấu ngoặc kép cuối cùng, điều này sẽ làm rối loạn cách hiển thị div nhận xét.

+0

bạn có thể cho mẫu mã? –

+0

Ý tôi là, mã PHP với str_replace bạn làm cho rel = "nofollow" –

+0

Xin lỗi. Lần đầu tiên của tôi trên StackOverflow. Nên làm vậy. – Brian

Trả lời

5

Đây là những gì bạn phải làm:

function fixLink($link) { 
    $link = str_replace(array('<a', '"', '</a>'), '', $link); 
    $link = str_replace(
     array('=', '>', ' '), 
     array('="', '">', '" '), 
     $link); 
    return '<a rel="nofollow' . $link . '</a>'; 
}  

echo fixLink('<a href="/index.html>asd</a>') . "\n"; 
echo fixLink('<a class="awesome" href="/index.html>asd</a>') . "\n"; 
echo fixLink('<a href="/index.html class="awesome">asd</a>') . "\n"; 
echo fixLink('<a target="_blank" href="/index.html class="awesome">asd</a>') . "\n"; 
echo fixLink('<a target="_blank" href="/index.html class="awesome>asd</a>') . "\n"; 
echo fixLink('<a target="_blank" href="/index.html target="_blank" class="awesome">asd</a>') . "\n"; 
echo fixLink('<a href="/index.html class=awesome">asd</a>') . "\n"; 

Đó sẽ ra:

<a rel="nofollow" href="/index.html">asd</a> 
<a rel="nofollow" class="awesome" href="/index.html">asd</a> 
<a rel="nofollow" href="/index.html" class="awesome">asd</a> 
<a rel="nofollow" target="_blank" href="/index.html" class="awesome">asd</a> 
<a rel="nofollow" target="_blank" href="/index.html" class="awesome">asd</a> 
<a rel="nofollow" target="_blank" href="/index.html" target="_blank" class="awesome">asd</a> 
<a rel="nofollow" href="/index.html" class="awesome">asd</a> 
+0

Chà. Cảm ơn bạn BoZ. Điều này có vẻ giống như một vấn đề thường gặp, nhưng tôi không thể tìm thấy bất cứ thứ gì trên đó. Sửa chữa này sẽ làm việc tốt. Cảm ơn một lần nữa. – Brian

+5

vui vì bạn thích nó. Tôi hy vọng đó là câu trả lời tốt nhất mà bạn có thể tìm thấy. –

+0

+1 Tuyệt vời! cách nhanh hơn regexp – Tech4Wilco

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