2010-07-02 77 views
2

PHP中的哪個函數驗證字符串是否爲html? 我的目標是從用戶那裏接受輸入,並檢查輸入html是否是字符串。PHP中的哪個函數驗證字符串是否爲有效的html?

不HTML字符串

例子:

sdkjshdk<div>jd</h3>ivdfadfsdf or sdkjshdkivdfadfsdf 

爲HTML字符串示例:

<div>sdfsdfsdf<label>dghdhdgh</label> fdsgfgdfgfd</div> 

感謝

+0

無論這些字符串是HTML的片段。前者顯然是無效的,但如果不進行修改,都不會通過W3C驗證程序。我認爲你需要對你想要允許的內容以及你想要阻止的內容做更具體的描述。 – 2010-07-02 15:36:40

+0

我的目標是從用戶處獲取輸入,並檢查是否輸入html而不僅僅是字符串。 – Yosef 2010-07-02 15:39:22

回答

7

也許你需要檢查字符串完全形成了。

我會用這樣的函數

function check($string) { 
    $start =strpos($string, '<'); 
    $end =strrpos($string, '>',$start); 

    $len=strlen($string); 

    if ($end !== false) { 
    $string = substr($string, $start); 
    } else { 
    $string = substr($string, $start, $len-$start); 
    } 
    libxml_use_internal_errors(true); 
    libxml_clear_errors(); 
    $xml = simplexml_load_string($string); 
    return count(libxml_get_errors())==0; 
} 

只是一個警告:HTML允許不平衡字符串類似以下。這不是一個XML有效塊,但它是一個合法的HTML塊

<ul><li>Hi<li> I'm another li</li></ul> 

免責聲明我已經修改了代碼(沒有測試它)。以便檢測字符串內部格式正確的html。

最後一個 雖然也許你應該使用strip_tags來控制用戶輸入(正如我在您的意見見過)

+0

這種方法失敗  - 沒有明顯的解決方法:-( – ErichBSchulz 2013-07-15 09:29:16

+0

@ErichBSchulz也許你剛剛測試它之前html_entity_decode($字符串)(快速和骯髒的解決方案,但它應該是足夠的) – Eineki 2013-07-16 07:21:04

+0

html_entity_decode()不會做例如,它會將<更改爲小於文字,這至少會有錯誤的含義,並且很可能是非格式良好。 – TextGeek 2016-06-01 20:37:11

3

你的意思是HTML或XHTML?

HTML標準和解釋非常鬆散,您的第一個片段可能會工作。它不會很漂亮,但你可能得到東西

XHTML是相當多的嚴格最低將期待您的片斷被很好地形成(所有打開的標籤被關閉;標籤可以嵌套,但不能重疊),如果你有未知的元素或屬性可能會引發警告。

像Tidy - http://php.net/manual/en/book.tidy.php - 可能是一個好的開始。一旦你使用它加載你的代碼片段,你可以使用tidy_error_counttidy_get_error_buffer來查看它是否足夠滿足你的需求。

+0

我的目標是從用戶處獲取輸入,並檢查輸入html是否是字符串。 – Yosef 2010-07-02 15:39:01

+0

好的。而且兩者都是HTML ... HTML規範非常寬鬆,幾乎沒有關係。另外第二個是XHTML。如果這就是你想要的,那就去探索Tidy,看看你能做什麼。 – CaseySoftware 2010-07-03 12:38:37

1

你們是不是要阻止用戶發佈的HTML標籤,而不是串?原因如果這是你想要做的只是需要striptags()

我們將刪除字符串中的所有html標籤。

0

如果你想使你的網站還保證,你肯定要使用HTML淨化器像htmlpurifier,整潔等

相關問題