2011-08-28 104 views
3

我目前使用jQuery检查textarea的具有HTML在它:(我将继续使用这个)如何使用PHP检查textarea的值是否包含HTML?

if ($('textarea#newMessage').val().match(/<(\w+)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/)) { 
     $('textarea#newMessage').focus(); 
     $('#error').html('Error: HTML is not aloud. Please remove all of the HTML in your message to continue.') 
     .click(function() { $('#newMessage').focus(); }) 
     .stop(true,true) 
     .fadeIn(800) 
     .delay(1500) 
     .fadeOut(200); 
     return false; 
    } 

可是,我该如何使用PHP做同样的事情?如果有人禁用了JavaScript,他们可以轻松地在HTML中提交表单。 PHP也有办法做到这一点吗?

+3

见http://stackoverflow.com/questions/5732758/detect-html-tags-in-a-string – Buddy

+1

一个简单的表达是'/ <.*?> /' – Herbert

回答

1

这将捕获标签并没有文字。

$textareaname = (isset($_POST['textareaname'])) 
       ? $_POST['textareaname'] 
       : ''; 

if ($textareaname !== strip_tags($_POST['textareaname'])) 
{ 
    // contains tags 
} 

elseif (trim($textareaname) === '') 
{ 
    // textarea is empty 
} 

else 
{ 
    // OK! do something 
} 

注:

  1. 如果表格没有textarea的东西送, $_POST['textareaname']将不存在,当你 尝试使用它PHP将抛出一个错误。
  2. 如果有人发送任何东西,但空间trim()将捕获它。
+0

我有点儿有点儿有错误信息。我会接受你的答案,但我宁愿有错误消息,好像他们没有启用JavaScript,他们可能会试图绕过我的jQuery检查,这意味着即使使用PHP也应该显示错误。但是非常感谢你告诉我关于'trim()'! :)另外,我可能不想放弃jQuery方法,因为我将使用AJAX提交表单。 – Nathan

+0

@Nathan:根据你的评论,我更新了代码来检查标签和空白textareas,只有空格。 – Herbert

+0

非常感谢! :)变量中的“?”和其他内容会做什么?它是'isset()'的一部分吗? – Nathan

1

试试这个:

if(preg_match("/<[^>]*>/", $_POST['textareaname'])){ 
    //contains html tags 
} else { 
    //dosomething... 
} 
+0

请问这个检查textarea的是空的? (我也需要这个)如果是这样也谢谢。 – Nathan

+0

edited ..删除html标签并检查textarea是否为空。 – Kakashi

+0

这将删除它们或显示错误,如果它有HTML标签吗? – Nathan

1

使用的preg_match()你已经得到了正则表达式。顺便说一句:与其“大声”你大概的意思是“允许”;)

+0

是的,我的意思是“允许”LOL。谢谢。 – Nathan

4
if ($text != strip_tags($text)) 
    // text contains html 

看到strip_tags

+0

感谢您的回答。 – Nathan

+0

+1实际回答问题。 – Herbert

1

首先,你可以通过preg_match

使用完全相同的正则表达式再说了,你想要限制HTML以避免更改代码结构中的任何内容。
因此,您可以使用htmlspecialchars以纯文本形式打印HTML。
但是,如果你真的需要检查,他们都存在,你可能只是检查符号<>,可以打破你的标记由preg_match('~[<>]~',..)或者只是strpos“ES

+0

是的,以及我限制HTML的原因是因为textarea是一个回复的事情,当你回复它时,它会被添加到数据库中,并发送一封电子邮件。我不想在电子邮件中添加额外的HTML。 (有人可以很容易地用'