Logo
convert plain html into xhtml
Online Now: 0

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Snippets Functions Classes

Home | PHP Resources | MySQL Zipbase | Forums

Snippet Code
Tries to make out of the given string a xhtml-compatible string, that means that the return-string could be wrapped within a xml.

xhtml-tools.php

 
<?php
/**
 * Take a look at the Remark-Lines of the function-header
 * 
 * function autoAdjustToXHMTL($string)
 * 
 * Tries to make out of the given string a xhtml-compatible string,
 * that means that the return-string could be wrapped within a xml.
 *
 * Example: $string = "<big><I>something<br></big> blabla"
 *          return = "<big><i>something><br /></i></big> blabla"
 *
 * As you can see, the folowing will be changed:
 *  - converted "<I>" to "<i>", as all html-nodes will be converted to lowercase
 *  - converted "<br>" to "<br />" to make br xhtml-conform (same would be done with "img")
 *  - the closing of "</big>" will have do an implicite closing of "<i>" because <big> surrounds "<i>"
 *
 * Beware: the output-string is not the most beautiful code possible but hopefully xhtml-conform
 *
 * @param string: input string, html-style (as a browser should like it)
 * @return: xhtml-compatible string
 *
 * Version
 * V1.0, 20090721, rene@pilz.cc, initial-version
 *
 * Released under the terms of BSD (http://en.wikipedia.org/wiki/BSD_licenses)
 */
function autoAdjustToXHTML($string) {
    
$returnString="";
    
$string=trim($string);
    
$elementStack=array();
    
$stackPoint=0;
    while (
$string!="") {
        
$pos=strpos($string,"<");
        if (
$pos===false) {
            
// no "<" found, return full string and exit while
            
$returnString.=$string;    
            break;
        }

        
// copy anythink up to the "<" into return string and reduce string
        
$returnString.=substr($string,0,$pos);
        
$string=trim(substr($string,$pos+1));

        
$tagName="";
        
// examine tag-name
        
$i=0$c="";
        for (;
$i<strlen($string);$i++) {
            
$c=substr($string,$i,1);
            if (
strpos(";<",$c)!==false) continue;    // some chars we ignore
            
if ($c==" "|| $c==">") break;
            
$tagName.=$c;
        }

        
$tagName=strtolower($tagName);    // convert uppercase 

        // is there a closing tag?
        
if (substr($tagName,0,1)=="/") {
            
// search for the closing ">" and ignore all before
            
$pos=strpos($string,">");
            if (
$pos===false$pos=strlen($string);
            
$string=substr($string,$pos+1);
            
// close as many tags up to the given tag
            
while ($stackPoint>0) {
                
$stackPoint--;
                
$stackElement=$elementStack[$stackPoint];
                
$returnString.="</".$stackElement.">";
                if (
$stackElement==$tagName) break;    // nothing more to do in this while
            
}
            continue;    
// this element-Processing is finished so far, continue at 'while ($string!="") {'
        
}

        
// if we are here, we are within a tag (opening tag)
        
        // Push tag on stack
        
$elementStack[$stackPoint]=$tagName;
        
$stackPoint++;

        
// add tag to returnString
        
$returnString.="<$tagName ";
    
        
// search up to ">"
        
$inApo=false;    // within Apostrophes (" or ')
        
$fakeApo=false;
        
$apoChar="";
        for (;
$i<strlen($string);$i++) {
            
$c=substr($string,$i,1);
            if (
$fakeApo && strpos(" \t",$c)) {
                
$fakeApo=false;
                
$returnString.='"';
            }
            if (!
$inApo && !$fakeApo && $c=='=' && !strpos(" \t'\"",substr($string,$i+1,1))) {
                echo 
"test2=".substr($string,$i+1,1)."---";
                
$fakeApo=true;
                
$returnString.='="';
                
$c="";
            }
            if (
$c==$apoChar && $inApo) { $inApo=false$returnString.=$c." "$c=""; }
            if (
$inApo && $c=="&" && strpos(substr($string,$i).";",";")>5$c="&amp;";
            else if ((
$c=="'" || $c=='"') && !$inApo) { $inApo=true$apoChar=$c; }
            if (
$c==">") break;
            
$returnString.=$c;
        }

        
// new $string is the rest
        
$string=substr($string,$i+1);
        
$returnString=trim($returnString);
        
        
// check if this has a "/>" at the end
        
$endSlash=(substr($returnString,strlen($returnString)-1)=="/");

        
// some elements must have a "/" at the end --> Fake it if needed
        
if (($tagName=="br" || $tagName=="img") && !$endSlash) { 
            
$returnString.="/"
            
$endSlash=true;
        }
        
        
// check if it is a remark-line (<!-- --> trade this as with-endSlash-Tag)
        
if (substr($tagName,0,3)=="!--") {
            
$returnString=trim($returnString);
            if (
substr($returnString,strlen($returnString)-2)!="--"$returnString.=" --"// make sure remark-line ends with "-->"
            
$endSlash=true;
        }

        
// again, do we have a end-slash? (or a faked one?)
        
if ($endSlash$stackPoint--;    // just remove element from stack
        
        // and now add the closing ">"
        
$returnString.=">";
    }

    
// ok, we are allmost finish, just clean up the elementStack (from last to first)
    
while ($stackPoint>0) {
        
$stackPoint--;
        
$returnString.="</".$elementStack[$stackPoint].">";
    }
    return 
$returnString;
}
php?>

 
Snippet Comments

Add Your Comment

No Comments Yet.

Add Your Comment

 
Snippet Tools
Rate this Snippet:

Rate the difficulty level:

Request Snippet Update


Suggested Difficulty Level: No votes yet.
Current Score: 2
Total votes: 2
Total Views: 1136

Other top snippets by renepilz:

Search

Input key terms:
User Panel

User name:

Password:

Register And Post Your Own Snippets

Snippets On Watch

1.  Auth Class with (2.83 of 87)

2.  Test Please Delete (2.83 of 30)

3.  Return all repeated (3.64 of 72)

4.  Convert an integer (3.3 of 71)

5.  URL Shortening for (2.75 of 52)

6.  Monthly Content Sorting (3 of 45)

7.  Show String Trimmed (2.97 of 65)

8.  Human readable file (2.01 of 70)

9.  Randomize array values (2.8 of 82)

10.  Create a recursive (3.35 of 55)

New Snippets

1.  Parse RFC822 date (4 of 1)

2.  Dynamic Image Uploading (5 of 1)

3.  Spam Filter (0 of 0)

4.  Is Multiple (0 of 0)

5.  Base64 Encode / (0 of 0)

6.  URL Encode / (0 of 0)

7.  temp openbills (0 of 0)

8.  Php Iban Validator (0 of 0)

9.  Mysql Table Builder (0 of 0)

10.  File size of (1.75 of 4)

11.  Mail from your (1 of 1)

12.  OddEven Class (0 of 0)

13.  Detect if a (1 of 1)

14.  MB CopyMCF-DIR :: (5 of 1)

15.  Upper/Lower Case Accented (0 of 0)

16.  Zodiac Signs (3 of 1)

17.  Really useful code (2.5 of 2)

18.  Calculate Central European (0 of 0)

19.  Email Attachment (4 of 1)

20.  ImageMagick Image Upload (0 of 0)

21.  convert plain html (2 of 2)

22.  Tag Builder (3.25 of 4)

23.  Get Inserted ID (4.33 of 3)

24.  Watermark An Image (3.33 of 3)

25.  Check Prime Numbers (1.5 of 8)

Home | Forum | Free PHP Web Hosting | Contact | Terms & Conditions |  
Donate
PHPSnips.com - ©2010