| Server IP : 180.180.241.3 / Your IP : 216.73.216.25 Web Server : Microsoft-IIS/7.5 System : Windows NT NETWORK-NHRC 6.1 build 7601 (Windows Server 2008 R2 Standard Edition Service Pack 1) i586 User : IUSR ( 0) PHP Version : 5.3.28 Disable Function : NONE MySQL : ON | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : C:/AppServ/www/news/libraries/domit/ |
Upload File : |
<?php
/**
* DOMIT! Doctor is a set of utilities for repairing malformed XML
* @package domit-xmlparser
* @copyright (C) 2004 John Heinstein. All rights reserved
* @license http://www.gnu.org/copyleft/lesser.html LGPL License
* @author John Heinstein <johnkarl@nbnet.nb.ca>
* @link http://www.engageinteractive.com/domit/ DOMIT! Home Page
* DOMIT! is Free Software
**/
/**
* A (static) class containing utilities for repairing malformed XML
*
* @package domit-xmlparser
* @author John Heinstein <johnkarl@nbnet.nb.ca>
*/
class domit_doctor {
/**
* Looks for illegal ampersands and converts them to entities
* @param string The xml text to be repaired
* @return string The repaired xml text
*/
function fixAmpersands($xmlText) {
$xmlText = trim($xmlText);
$startIndex = -1;
$processing = true;
$illegalChar = '&';
while ($processing) {
$startIndex = strpos($xmlText, $illegalChar, ($startIndex + 1));
if ($startIndex !== false) {
$xmlText = domit_doctor::evaluateCharacter($xmlText,
$illegalChar, ($startIndex + 1));
}
else {
$processing = false;
}
}
return $xmlText;
} //fixAmpersands
/**
* Evaluates whether an ampersand should be converted to an entity, and performs the conversion
* @param string The xml text
* @param string The (ampersand) character
* @param int The character index immediately following the ampersand in question
* @return string The repaired xml text
*/
function evaluateCharacter($xmlText, $illegalChar, $startIndex) {
$total = strlen($xmlText);
$searchingForCDATASection = false;
for ($i = $startIndex; $i < $total; $i++) {
$currChar = substr($xmlText, $i, 1);
if (!$searchingForCDATASection) {
switch ($currChar) {
case ' ':
case "'":
case '"':
case "\n":
case "\r":
case "\t":
case '&':
case "]":
$searchingForCDATASection = true;
break;
case ";":
return $xmlText;
break;
}
}
else {
switch ($currChar) {
case '<':
case '>':
return (substr_replace($xmlText, '&',
($startIndex - 1) , 1));
break;
case "]":
return $xmlText;
break;
}
}
}
return $xmlText;
} //evaluateCharacter
} //domit_doctor
?>