PluginProbe
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress / 11.1.1
AcyMailing – An Ultimate Newsletter Plugin and Marketing Automation Solution for WordPress v11.1.1
11.1.1 11.1.0 11.0.5 11.0.4 11.0.3 11.0.2 11.0.1 11.0.0 10.11.1 10.11.0 10.10.2 10.10.1 10.10.0 10.9.1 trunk 10.0.0 10.0.1 10.1.0 10.1.1 10.1.2 10.1.3 10.1.4 10.2.0 10.2.1 10.2.2 All 62 releases
← All changes | back/Helpers/EncodingHelper.php +0 -174 11.0.4 → 11.1.1 View file →
@@ -1,174 +1,0 @@
1 -<?php
2 -
3 -namespace AcyMailing\Helpers;
4 -
5 -defined('ABSPATH') || die('Restricted Access');
6 -
7 -use AcyMailing\Core\AcymObject;
8 -use AcyMailing\Types\CharsetType;
9 -
10 -class EncodingHelper extends AcymObject
11 -{
12 - public function change(string $data, string $inputCharset, string $outputCharset): string
13 - {
14 - $inputCharset = strtoupper(trim($inputCharset));
15 - $outputCharset = strtoupper(trim($outputCharset));
16 -
17 - $supportedEncodings = [
18 - 'BIG5',
19 - 'ISO-8859-1',
20 - 'ISO-8859-2',
21 - 'ISO-8859-3',
22 - 'ISO-8859-4',
23 - 'ISO-8859-5',
24 - 'ISO-8859-6',
25 - 'ISO-8859-7',
26 - 'ISO-8859-8',
27 - 'ISO-8859-9',
28 - 'ISO-8859-10',
29 - 'ISO-8859-13',
30 - 'ISO-8859-14',
31 - 'ISO-8859-15',
32 - 'ISO-2022-JP',
33 - 'US-ASCII',
34 - 'UTF-7',
35 - 'UTF-8',
36 - 'UTF-16',
37 - 'WINDOWS-1251',
38 - 'WINDOWS-1252',
39 - 'ARMSCII-8',
40 - 'ISO-8859-16',
41 - ];
42 - if (!in_array($inputCharset, $supportedEncodings)) {
43 - acym_enqueueMessage(acym_translationSprintf('ACYM_ENCODING_NOT_SUPPORTED_X', $inputCharset), 'error');
44 - } elseif (!in_array($outputCharset, $supportedEncodings)) {
45 - acym_enqueueMessage(acym_translationSprintf('ACYM_ENCODING_NOT_SUPPORTED_X', $outputCharset), 'error');
46 - }
47 -
48 - if ($inputCharset == $outputCharset) {
49 - return $data;
50 - }
51 -
52 - if ($inputCharset === 'UTF-8' && $outputCharset === 'ISO-8859-1') {
53 - $data = str_replace(['€', '„', '“'], ['EUR', '"', '"'], $data);
54 - }
55 -
56 - if (function_exists('iconv')) {
57 - // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_set_error_handler -- Catching iconv errors for clean handling.
58 - set_error_handler('AcyMailing\Helpers\acym_errorHandlerEncoding');
59 - $encodedData = iconv($inputCharset, $outputCharset.'//IGNORE', $data);
60 - restore_error_handler();
61 - //Sometimes the function does not return error but remove the whole content...
62 - if (!empty($encodedData) && !acym_errorHandlerEncoding(-1)) {
63 - return $encodedData;
64 - }
65 - }
66 -
67 - if (function_exists('mb_convert_encoding')) {
68 - return mb_convert_encoding($data, $outputCharset, $inputCharset);
69 - }
70 -
71 - if ($inputCharset === 'UTF-8' && $outputCharset === 'ISO-8859-1') {
72 - return acym_utf8Decode($data);
73 - }
74 -
75 - if ($inputCharset === 'ISO-8859-1' && $outputCharset === 'UTF-8') {
76 - return acym_utf8Encode($data);
77 - }
78 -
79 - return $data;
80 - }
81 -
82 - public function detectEncoding(string &$content): string
83 - {
84 - if (!function_exists('mb_check_encoding')) {
85 - return '';
86 - }
87 -
88 - $toTest = ['UTF-8'];
89 - //Depending on the current language, we test based on other charset...
90 -
91 - $tag = acym_getLanguageTag();
92 -
93 - // If you're greek, we check based on the greek charset first!
94 - if ($tag == 'el-GR') {
95 - $toTest[] = 'ISO-8859-7';
96 - }
97 - $toTest[] = 'ISO-8859-1';
98 - $toTest[] = 'ISO-8859-2';
99 - $toTest[] = 'Windows-1252';
100 -
101 - foreach ($toTest as $oneEncoding) {
102 - if (mb_check_encoding($content, $oneEncoding)) {
103 - return $oneEncoding;
104 - }
105 - }
106 -
107 - // Could not detect it...
108 - return '';
109 - }
110 -
111 - public function encodingField(string $name, string $selected): void
112 - {
113 - acym_select(
114 - [
115 - 'binary' => 'Binary',
116 - 'quoted' => 'Quoted-printable',
117 - '7bit' => '7 Bit',
118 - '8bit' => '8 Bit',
119 - 'base64' => 'Base 64',
120 - ],
121 - $name,
122 - $selected,
123 - [
124 - 'class' => 'acym__select',
125 - 'acym-data-infinite' => '',
126 - 'style' => 'max-width: 200px;',
127 - ],
128 - '',
129 - '',
130 - 'config_encoding',
131 - false,
132 - true
133 - );
134 - }
135 -
136 - public function charsetField(string $name, string $selected, array $attribs = [], bool $display = false): string
137 - {
138 - $charsetType = new CharsetType();
139 -
140 - return acym_select(
141 - $charsetType->charsets,
142 - $name,
143 - $selected,
144 - $attribs,
145 - '',
146 - '',
147 - null,
148 - false,
149 - $display
150 - );
151 - }
152 -}
153 -
154 -/**
155 - * Logs the errors happening in the iconv function in order to know if we can use its result or not
156 - *
157 - * @return bool true if an error occurred
158 - */
159 -function acym_errorHandlerEncoding(int $errno, string $errstr = ''): bool
160 -{
161 - static $error = false;
162 - if ($errno === -1) {
163 - //return the value of the static flag and re init it
164 - $currentError = $error;
165 - $error = false;
166 -
167 - return $currentError;
168 - }
169 - //set the satic flag
170 - $error = true;
171 -
172 - //no need to display the notice
173 - return true;
174 -}