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 '. './vendor/bin/phpcs '.
'--standard=./tasks/code_sniffer/MailPoet '. '--standard=./tasks/code_sniffer/MailPoet '.
'--ignore=./lib/Util/Sudzy/*,./lib/Util/CSS.php,./lib/Util/XLSXWriter.php,'. '--ignore=./lib/Util/Sudzy/*,./lib/Util/CSS.php,./lib/Util/XLSXWriter.php,'.
'./lib/Config/PopulatorData/Templates/* '. './lib/Util/pQuery/*,./lib/Config/PopulatorData/Templates/* '.
'lib/ '. 'lib/ '.
$severityFlag $severityFlag
); );

View File

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

View File

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

View File

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

View File

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

View File

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