Merge pull request #816 from mailpoet/utf8_renderer_fix

Fixed UTF-8 encoding in renderer on PHP 5.3 [MAILPOET-812]
This commit is contained in:
stoletniy
2017-02-14 12:39:53 +03:00
committed by GitHub
7 changed files with 42 additions and 9 deletions

View File

@ -186,7 +186,7 @@ class RoboFile extends \Robo\Tasks {
'./vendor/bin/phpcs '.
'--standard=./tasks/code_sniffer/MailPoet '.
'--ignore=./lib/Util/Sudzy/*,./lib/Util/CSS.php,./lib/Util/XLSXWriter.php,'.
'./lib/Config/PopulatorData/Templates/* '.
'./lib/Util/pQuery/*,./lib/Config/PopulatorData/Templates/* '.
'lib/ '.
$severityFlag
);

View File

@ -2,6 +2,7 @@
namespace MailPoet\Newsletter\Renderer\Blocks;
use MailPoet\Newsletter\Renderer\StylesHelper;
use MailPoet\Util\pQuery\pQuery;
class Footer {
static function render($element) {
@ -10,7 +11,7 @@ class Footer {
$line_height = sprintf(
'%spx', StylesHelper::$line_height_multiplier * (int)$element['styles']['text']['fontSize']
);
$DOM_parser = new \pQuery();
$DOM_parser = new pQuery();
$DOM = $DOM_parser->parseStr($element['text']);
if(isset($element['styles']['link'])) {
$links = $DOM->query('a');

View File

@ -2,6 +2,7 @@
namespace MailPoet\Newsletter\Renderer\Blocks;
use MailPoet\Newsletter\Renderer\StylesHelper;
use MailPoet\Util\pQuery\pQuery;
class Header {
static function render($element) {
@ -10,7 +11,7 @@ class Header {
$line_height = sprintf(
'%spx', StylesHelper::$line_height_multiplier * (int)$element['styles']['text']['fontSize']
);
$DOM_parser = new \pQuery();
$DOM_parser = new pQuery();
$DOM = $DOM_parser->parseStr($element['text']);
if(isset($element['styles']['link'])) {
$links = $DOM->query('a');

View File

@ -3,6 +3,7 @@ namespace MailPoet\Newsletter\Renderer\Blocks;
use MailPoet\Newsletter\Editor\PostContentManager;
use MailPoet\Newsletter\Renderer\StylesHelper;
use MailPoet\Util\pQuery\pQuery;
class Text {
static function render($element) {
@ -25,7 +26,7 @@ class Text {
}
static function convertBlockquotesToTables($html) {
$DOM_parser = new \pQuery();
$DOM_parser = new pQuery();
$DOM = $DOM_parser->parseStr($html);
$blockquotes = $DOM->query('blockquote');
foreach($blockquotes as $blockquote) {
@ -70,7 +71,7 @@ class Text {
}
static function convertParagraphsToTables($html) {
$DOM_parser = new \pQuery();
$DOM_parser = new pQuery();
$DOM = $DOM_parser->parseStr($html);
$paragraphs = $DOM->query('p');
if(!$paragraphs->count()) return $html;
@ -134,7 +135,7 @@ class Text {
}
static function styleLists($html) {
$DOM_parser = new \pQuery();
$DOM_parser = new pQuery();
$DOM = $DOM_parser->parseStr($html);
$lists = $DOM->query('ol, ul, li');
if(!$lists->count()) return $html;
@ -153,7 +154,7 @@ class Text {
}
static function styleHeadings($html) {
$DOM_parser = new \pQuery();
$DOM_parser = new pQuery();
$DOM = $DOM_parser->parseStr($html);
$headings = $DOM->query('h1, h2, h3, h4');
if(!$headings->count()) return $html;

View File

@ -3,10 +3,11 @@ namespace MailPoet\Newsletter\Renderer\PostProcess;
use MailPoet\Newsletter\Links\Links;
use MailPoet\Newsletter\Renderer\Renderer;
use MailPoet\Util\pQuery\pQuery;
class OpenTracking {
static function process($template) {
$DOM = new \pQuery();
$DOM = new pQuery();
$DOM = $DOM->parseStr($template);
$template = $DOM->query('body');
// url is a temporary data tag that will be further replaced with

View File

@ -1,6 +1,8 @@
<?php
namespace MailPoet\Newsletter\Renderer;
use MailPoet\Util\pQuery\pQuery;
if(!defined('ABSPATH')) exit;
class Renderer {
@ -19,7 +21,7 @@ class Renderer {
$this->preview = $preview;
$this->blocks_renderer = new Blocks\Renderer($this->newsletter, $this->preview);
$this->columns_renderer = new Columns\Renderer();
$this->DOM_parser = new \pQuery();
$this->DOM_parser = new pQuery();
$this->CSS_inliner = new \MailPoet\Util\CSS();
$this->template = file_get_contents(dirname(__FILE__) . '/' . self::NEWSLETTER_TEMPLATE);
}

View File

@ -0,0 +1,27 @@
<?php
namespace MailPoet\Util\pQuery;
// extend pQuery class to use UTF-8 encoding when getting elements' inner/outer text
class pQuery extends \pQuery {
public static function parseStr($html) {
$parser = new Html5Parser($html);
return $parser->root;
}
}
class Html5Parser extends \pQuery\HtmlParser {
var $root = 'MailPoet\Util\pQuery\DomNode';
}
class DomNode extends \pQuery\DomNode {
var $childClass = 'MailPoet\Util\pQuery\DomNode';
function getInnerText() {
return html_entity_decode($this->toString(true, true, 1), ENT_QUOTES, 'UTF-8');
}
function getOuterText() {
return html_entity_decode($this->toString(), ENT_QUOTES, 'UTF-8');
}
}