2015-12-08 18 views
1

嗨,我的問題是如何正確清理包含html的輸入字段。現在我做:如何用html在wordpress中清理文本字段

if(isset($_POST[ 'obecnie' ])) { update_post_meta($post_id, 'obecnie', sanitize_text_field($_POST['obecnie' ])); }

sanitize_text_field是一個WordPress的功能,它去除來自輸入的所有HTML。我需要的是實際上是允許用戶在輸入中插入分隔標籤或新的線條實體,並在前端顯示這個實體。

回答

2

wp_kses從字符串中除去HTML標記和屬性,除了您在調用它時白名單

例如只允許BR標籤和鏈接與href屬性(但沒有其他人,甚至不是一種風格或標題),你把它想:

$allowed_html = array(
    'a' => array(
    'href' => array(), 
), 
    'br' => array(), 
); 
$str = wp_kses($str, $allowed_html); 
+0

戴夫·羅斯 - 問題是,如果wp_kses是否具有輸入值進行所有必要的衛生處理工作? – Casi

+0

在wp_kses之後,您將擁有一個包含明文和您指定的HTML標記+屬性的字符串。這對於WordPress VIP的代碼審查標準來說肯定是足夠的(https://vip.wordpress.com/2011/10/13/key-differences-between-validation-and-sanitization/)。 –

+0

但是,請不要將衛生處理與轉義混淆。您仍然希望在輸出時再次使用esc_ *函數或wp_kses()中的一個來轉義該值。 –

0

不知道這一點WordPress的功能,但你可以試試這個功能消毒ヶ輛:

然後你就可以將用戶輸入換行符(實際線路中斷,不BR標籤),以BR標籤顯示在任何地方,這樣才:

preg_replace('/[\n\r]/', '<br />',htmlentities($_POST['obecnie' ])); 

而且你還需要記住恢復換行符回來,如果你打算給用戶編輯選項:

$textToBeShownInTextBox = str_replace('<br />',"\n", $textFromDb);