2013-07-07 15 views
0

我試圖找到解決方案,因爲2小時後阻止超鏈接到客人,但沒有運氣。PHP:阻止所有超鏈接給客人

正在從數據庫加載文本內容並使用HTML格式進行呈現。所有鏈接用戶添加純http://格式或錨標記它會自動轉換爲鏈接。

我想隱藏/阻止來賓用戶的所有超鏈接。我需要你的幫助......真的卡住了。

我從這個數組的數據庫中獲取內容$data['content']這是html內容。

+2

還有,你stuckness – dbf

+0

的所有那些小時後試圖如果它是PHP,只是不輸出超鏈接,或只輸出的文本爲純文本。等voilá,他們不再可點擊。 – GolezTrol

+0

我在下面寫了一個一般答案。只是想在這裏發表評論,您應該改正問題標題中的錯字。 「hyperlin」應該是「超鏈接」。在屬,你應該認真考慮增加更多的信息,你的問題(見下文),並在此之後,改變標題類似,「PHP:如何防止用戶在Drupal進入完整的HTML鏈接」(或任何系統,你是使用)。 – David

回答

0

沒有看到你的代碼或更多地瞭解上下文,這裏是值得學習和適用於您的情況:把這個代碼放到一個名爲demo.php或類似的東西,並在命令行中運行:

<?php 

$text_with_links[] = 'http://example.com'; 
$text_with_links[] = '<a href="http://example.com">Link</a>'; 

echo "User text:\n\n"; 
foreach ($text_with_links as $text_example) { 
    echo "\t${text_example}\n"; 
} 

echo "\n\n"; 

echo "Use text filtered by htmlspecialchars:\n\n"; 
foreach ($text_with_links as $text_example) { 
    echo "\t" . htmlspecialchars($text_example) . "\n"; 
} 

echo "\n\n"; 

echo "Use text filtered by strip_tags:\n\n"; 
foreach ($text_with_links as $text_example) { 
    echo "\t" . strip_tags($text_example) . "\n"; 
} 

您應該看到這樣的事情:

$ php demo.php 
User text: 

    http://example.com 
    <a href="http://example.com">Link</a> 


Use text filtered by htmlspecialchars: 

    http://example.com 
    &lt;a href=&quot;http://example.com&quot;&gt;Link&lt;/a&gt; 


User text filtered by strip_tags: 

    http://example.com 
    Link 

這證明了使用兩個核心PHP函數,用htmlspecialchars和用strip_tags。閱讀文檔,這些在這裏:

注意如何沒有這些功能進行更改用戶條目 「http://example.com」。當你說「所有鏈接用戶添加純http://格式...它會自動轉換爲鏈接。」,我懷疑有一個過程發生在你正在離開的中間。只需將字符串「http://example.com」打印到頁面上,通常不會將其呈現爲HTML定位標記。

正如其他人的評論,讓您應該遵循最好的幫助stackoverflow.com指引,並提供所有相關細節和內容,以您的問題,並打印您到目前爲止已經試過代碼,以便其他人可以糾正,也更好地瞭解你正在處理的事情。

請提一下您正在使用的框架或CMS(因爲我強烈懷疑您正在使用它)。 Drupal,Joomla,Wordpress等

目前,您可以簡單地從使用str_replace() - http://www.php.net/manual/en/function.str-replace.php從數據庫中檢索的所有字符串中刪除「http://」。但這不是最好的解決方案。我認爲發生的事情是,您正在使用的軟件將「http:// format」文本(用於您的文字)轉換爲HTML定位標記。 例如,如果您使用的是Drupal並提供了客人有權訪問的網絡表格,則應將格式從「完整HTML」更改爲更有限的格式,否則您允許匿名用戶將HTML輸入到數據庫中。 您可能根本不需要PHP代碼解決方案。最好的辦法是檢查所提供的訪客用戶所見即所得編輯器上的控件,並確保模板設置正確。

此外,你應該谷歌「防止XSS攻擊PHP」,並「防止SQL注入PHP」。如果你想擁有一個安全的網站,這是你必須做的研究。

好運。如果你提供更多的細節,我和其他人可以給你更具體的幫助。


編輯:打印什麼,我在評論中寫道下方,以方便您閱讀:

$content_tags_stripped = strip_tags($data['content']); 

OR

$content_no_htmlspecialchars = htmlspecialchars($data['content']); 

然後使用這些變量在你的代碼,而不是$數據['內容「]。

但請研究一下我寫的休息,當你有時間。我想你可以通過這種方式找到一個更令人滿意的解決方案。祝你好運。

+0

我正在從數據庫中的內容與此'$數據[「內容」]'現在我搞不清我怎麼混淆如何檢索URL和超鏈接,所以我可以按照你的代碼。 – Artist

+0

簡單的答案是這樣的: 「$ content_tags_stripped =用strip_tags($數據[ '內容']);」或「$ content_no_htmlspecialchars = htmlspecialchars($ data ['content']);」。在代碼中執行此操作後,請使用$ content_tags_stripped或$ content_no_htmlspecialchars而不是$ data ['content']。但是,請在你有時間的時候研究我寫的內容,因爲這是非常重要的。祝你好運。 – David

+0

我將最後一條評論中所寫的內容複製到原始答案的底部,以便閱讀和/或理解。 – David

相關問題