Code to strip out <p> tags in empty placeholders

Once in a while the question how to strip <p> and <span> tags in empty placeholders comes up in the newsgroup.

A solution would be to implement a custom placeholder control that removes these tags or a workflow event.

The simplest solution is a workflow event to do this. This event would have to check if there is meaningful content in the control and if not ensure that an empty string is set a placeholder content.

Something like this:

public void CmsPosting_PlaceholderPropertyChanging( Object sender, PropertyChangingEventArgs e )  
{
   if (e.Target is HtmlPlaceholder)
   {
      if (IsEmpty(e.PropertyValue))
          e.PropertyValue = “”;
   }
}

private bool IsEmpty(string content)
{
    //visible tags
    string tagsToKeep = “img|hr”;                    
                            
    //This regular expression matches all tags listed above
    string regExpTagsToKeep = 
        “<[\\s|/]*(“ + tagsToKeep + “)\\b[^>]*>”;    
    Regex reTagsToKeep = new Regex(regExpTagsToKeep, RegexOptions.IgnoreCase | RegexOptions.Compiled);
                                    
    //Check if one of the tags to keep is included and exit.    
    if (reTagsToKeep.IsMatch(content))
    {
        //Placeholder is not empty.                
        return false;
    }
                                    
    //This regular expression gets all tags in the content 
    string regExpForAllTags = “<[^>]*>”;                
    Regex reAllTags = new Regex(regExpForAllTags, RegexOptions.IgnoreCase | RegexOptions.Compiled);
                                    
    //Remove all Tags by replacing with an empty string
    content = reAllTags.Replace(content, “”);
                                    
    //Remove all spaces and non-breaking spaces (&nbsp;) 
    content = content.Replace(” “,“”);            
    content = content.Replace(“&nbsp;”,“”);            
                                    
    if (content == “”)
    {
        //All tags removed, we are left with an empty string    
        //Placeholder is empty.                    
        return true;                        
    }                                
    else                                
    {
        //After removing all tags, we still have content. 
        //Placeholder is not empty.                
        return false;                        
    }                                
}

 

2 Comments


  1. Hey, granted this is older code, but any help here would be appreachated.

    I need to do this to over come a bug, but we are useing VB.net and so far nothing has worked. I have tried to use your code, but cannot find out what to include to make it all work.

    Thank you in advance

    Reply

  2. Hi Eric,

    you need to create a custom placeholder control, derive from the original one and add the above code to it.

    Sorry I cannot help you with VB.NET. Never used it. You either need to create the placeholder control in C# or port the above code to VB.NET.

    Cheers,

    Stefan

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.