<?php
/*
- * Copyright (C) 2003-2004 Polytechnique.org
+ * Copyright (C) 2003-2006 Polytechnique.org
* http://opensource.polytechnique.org/
*
* This program is free software; you can redistribute it and/or modify
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-
require_once 'diogenes/diogenes.misc.inc.php';
-/** Protect PHP code.
+/** Protect a text block and encode it as base64.
*/
-function phpProtect($input)
+function textProtectTag($tag_open, $tag_close, $prot_open, $prot_close, $input)
{
- $splits = preg_split("/(<\?php|\?>)/",$input,-1,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
+ $splits = preg_split("/($tag_open|$tag_close)/",$input,-1,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
+
$output = "";
-
+ $depth = 0;
while ($block = array_shift($splits)) {
- if ($block == "<?php") {
- $code = array_shift($splits);
- $end = array_shift($splits);
- if ($end != "?>")
- die("phpProtect : parse error");
- $output .= "{PHP:".base64_encode($code).":PHP}";
+ if (preg_match("/^$tag_open$/", $block)) {
+ if ($depth == 0) {
+ $save = "";
+ }
+ $save .= $block;
+ $depth++;
+ } else if ($depth > 0) {
+ $save .= $block;
+ if (preg_match("/^$tag_close$/", $block))
+ {
+ $depth--;
+ if ($depth == 0)
+ {
+ $output .= $prot_open.base64_encode($save).$prot_close;
+ $save = "";
+ }
+ }
} else {
$output .= $block;
}
}
-/** Unprotect PHP code.
+/** Unprotect base64 blocks.
*/
-function phpUnprotect($input)
+function textUnprotectTags($prot_open, $prot_close, $input)
{
- $splits = preg_split("/({PHP:.+:PHP})/",$input,-1,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
+ $splits = preg_split("/($prot_open.+$prot_close)/",$input,-1,PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
$output = "";
foreach ($splits as $block) {
- if (preg_match("/{PHP:(.+):PHP}/",$block,$match)) {
- $output .= "<?php".base64_decode($match[1])."?>";
+ if (preg_match("/^$prot_open(.+)$prot_close$/", $block, $match)) {
+ $output .= base64_decode($match[1]);
} else {
$output .= $block;
}
}
+/** Protect HTML code from Textism.
+ */
+function htmlProtectFromTextism($input)
+{
+ return textProtectTag("<table\s*?[^>]*>", "<\/table>", "{NOP:", ":NOP}", $input);
+}
+
+
+/** Restore HTML code that was protected from Textism.
+ */
+function htmlUnprotectFromTextism($input)
+{
+ return textUnprotectTags("{NOP:", ":NOP}", $input);
+}
+
+
+/** Protect PHP code.
+ */
+function phpProtect($input)
+{
+ return textProtectTag("<\?php", "\?>", "{PHP:", ":PHP}", $input);
+}
+
+
+/** Unprotect PHP code.
+ */
+function phpUnprotect($input)
+{
+ return textUnprotectTags("{PHP:", ":PHP}", $input);
+}
+
+
/** Convert XHTML-compliant tags to plain HTML.
*/
function xhtmlToHtml($input)
return preg_replace("/<(br|img|input)( [^>]+)?>/","<\$1\$2/>",$input);
}
+
?>