Fix html parsing

This commit is contained in:
RainLoop Team 2016-08-30 00:00:16 +03:00
parent 962391e2a0
commit a30fc911f6
3 changed files with 44 additions and 11 deletions

View file

@ -5,7 +5,7 @@ import _ from '_';
import ko from 'ko'; import ko from 'ko';
import {Magics} from 'Common/Enums'; import {Magics} from 'Common/Enums';
import {settingsSaveHelperSimpleFunction, trim, log} from 'Common/Utils'; import {settingsSaveHelperSimpleFunction, trim} from 'Common/Utils';
import {i18n, trigger as translatorTrigger} from 'Common/Translator'; import {i18n, trigger as translatorTrigger} from 'Common/Translator';
import Remote from 'Remote/Admin/Ajax'; import Remote from 'Remote/Admin/Ajax';

View file

@ -622,7 +622,7 @@ gulp.task('default', function(callback) {
}); });
// watch // watch
gulp.task('watch', ['css:watch', 'js:validate:watch'], function() { gulp.task('watch', ['css:main', 'js:validate'], function() {
cfg.watch = true; cfg.watch = true;
livereload.listen(); livereload.listen();
gulp.watch(cfg.paths.less.main.watch, {interval: cfg.watchInterval}, ['css:main']); gulp.watch(cfg.paths.less.main.watch, {interval: cfg.watchInterval}, ['css:main']);
@ -631,7 +631,6 @@ gulp.task('watch', ['css:watch', 'js:validate:watch'], function() {
// aliases // aliases
gulp.task('build', ['rainloop']); gulp.task('build', ['rainloop']);
gulp.task('watch', ['css:watch', 'js:validate:watch']);
gulp.task('d', ['default']); gulp.task('d', ['default']);
gulp.task('w', ['watch']); gulp.task('w', ['watch']);

View file

@ -75,7 +75,7 @@ class HtmlUtils
@$oDom->loadHTML('<'.'?xml version="1.0" encoding="utf-8"?'.'>'. @$oDom->loadHTML('<'.'?xml version="1.0" encoding="utf-8"?'.'>'.
'<html '.$sHtmlAttrs.'><head>'. '<html '.$sHtmlAttrs.'><head>'.
'<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head>'. '<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head>'.
'<body '.$sBodyAttrs.'><div data-wrp="rainloop">'.$sText.'</div></body></html>'); '<body '.$sBodyAttrs.'><div data-wrp="rainloop">'.\MailSo\Base\Utils::Utf8Clear($sText).'</div></body></html>');
@$oDom->normalizeDocument(); @$oDom->normalizeDocument();
@ -196,12 +196,7 @@ class HtmlUtils
else else
{ {
$sResult = self::domToString($oDiv, $oDom); $sResult = self::domToString($oDiv, $oDom);
if (0 === strpos($sResult, '<div>') && '</div>' === substr($sResult, -6)) $sResult = \MailSo\Base\HtmlUtils::UnWrapTag($sResult);
{
$sResult = substr($sResult, 5);
$sResult = substr($sResult, 0, -6);
$sResult = \trim($sResult);
}
} }
} }
else else
@ -217,7 +212,37 @@ class HtmlUtils
/** /**
* @param string $sHtml * @param string $sHtml
* @param string $sHtmlAttrs = ' * @param string $sTag = 'div'
* @param string $iUnwrapCount = 10
*
* @return string
*/
public static function UnWrapTag($sHtml, $sTag = 'div', $iUnwrapCount = 5)
{
$iUnwrapCount = 0 < $iUnwrapCount ? $iUnwrapCount : 1;
$iUnwrapCount = 10 < $iUnwrapCount ? 10 : $iUnwrapCount;
$sTag = $sTag ? $sTag : 'div';
$iTagLen = \strlen($sTag);
while (0 < $iUnwrapCount)
{
$sHtml = \trim($sHtml);
if (0 === \strpos($sHtml, '<'.$sTag.'>') && '</'.$sTag.'>' === \substr($sHtml, -3 - $iTagLen))
{
$sHtml = \substr(\substr($sHtml, 2 + $iTagLen), 0, -3 - $iTagLen);
$sHtml = \trim($sHtml);
}
$iUnwrapCount--;
}
return $sHtml;
}
/**
* @param string $sHtml
* @param string $sHtmlAttrs = ''
* @param string $sBodyAttrs = '' * @param string $sBodyAttrs = ''
* *
* @return string * @return string
@ -247,14 +272,23 @@ class HtmlUtils
// $sHtml = 0 < $iPos ? \substr($sHtml, $iPos) : $sHtml; // $sHtml = 0 < $iPos ? \substr($sHtml, $iPos) : $sHtml;
// } // }
$sHtml = \preg_replace('/<head([^>]*)>/si', '', $sHtml);
$sHtml = \preg_replace('/<body([^>]*)>/si', '', $sHtml); $sHtml = \preg_replace('/<body([^>]*)>/si', '', $sHtml);
$sHtml = \preg_replace('/<\/body>/i', '', $sHtml); $sHtml = \preg_replace('/<\/body>/i', '', $sHtml);
$sHtml = \preg_replace('/<html([^>]*)>/i', '', $sHtml); $sHtml = \preg_replace('/<html([^>]*)>/i', '', $sHtml);
$sHtml = \preg_replace('/<\/html>/i', '', $sHtml); $sHtml = \preg_replace('/<\/html>/i', '', $sHtml);
$sHtmlAttrs = \preg_replace('/xmlns:[a-z]="[^"]*"/i', '', $sHtmlAttrs); $sHtmlAttrs = \preg_replace('/xmlns:[a-z]="[^"]*"/i', '', $sHtmlAttrs);
$sHtmlAttrs = \preg_replace('/xmlns:[a-z]=\'[^\']*\'/i', '', $sHtmlAttrs);
$sHtmlAttrs = \preg_replace('/xmlns="[^"]*"/i', '', $sHtmlAttrs); $sHtmlAttrs = \preg_replace('/xmlns="[^"]*"/i', '', $sHtmlAttrs);
$sHtmlAttrs = \preg_replace('/xmlns=\'[^\']*\'/i', '', $sHtmlAttrs);
$sBodyAttrs = \preg_replace('/xmlns:[a-z]="[^"]*"/i', '', $sBodyAttrs); $sBodyAttrs = \preg_replace('/xmlns:[a-z]="[^"]*"/i', '', $sBodyAttrs);
$sBodyAttrs = \preg_replace('/xmlns:[a-z]=\'[^\']*\'/i', '', $sBodyAttrs);
$sHtmlAttrs = trim($sHtmlAttrs);
$sBodyAttrs = trim($sBodyAttrs);
$sHtml = \MailSo\Base\HtmlUtils::UnWrapTag($sHtml);
return $sHtml; return $sHtml;
} }