Cloudflare - Version 4.5.1

Version Description

  • 2021-06-03 =

  • Rewrite PHP 8 bootstrap files for symfony/polyfill to be PHP 7 compatible

Download this release

Release Info

Developer manatarms
Plugin Icon 128x128 Cloudflare
Version 4.5.1
Comparing to
See all releases

Code changes from version 4.5.0 to 4.5.1

cloudflare.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Cloudflare
4
  Plugin URI: https://blog.cloudflare.com/new-wordpress-plugin/
5
  Description: Cloudflare speeds up and protects your WordPress site.
6
- Version: 4.5.0
7
  Requires PHP: 7.2
8
  Author: Cloudflare, Inc.
9
  License: BSD-3-Clause
3
  Plugin Name: Cloudflare
4
  Plugin URI: https://blog.cloudflare.com/new-wordpress-plugin/
5
  Description: Cloudflare speeds up and protects your WordPress site.
6
+ Version: 4.5.1
7
  Requires PHP: 7.2
8
  Author: Cloudflare, Inc.
9
  License: BSD-3-Clause
composer.json CHANGED
@@ -33,7 +33,7 @@
33
  "_comment": [
34
  "php-compatibility-install comes from https://github.com/wimg/PHPCompatibility/issues/102#issuecomment-255778195"
35
  ],
36
- "version": "4.5.0",
37
  "config": {
38
  "platform": {
39
  "php": "7.2"
33
  "_comment": [
34
  "php-compatibility-install comes from https://github.com/wimg/PHPCompatibility/issues/102#issuecomment-255778195"
35
  ],
36
+ "version": "4.5.1",
37
  "config": {
38
  "platform": {
39
  "php": "7.2"
composer.lock CHANGED
@@ -4,7 +4,7 @@
4
  "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5
  "This file is @generated automatically"
6
  ],
7
- "content-hash": "06b0d153d416cf85929ecd0e3b939f54",
8
  "packages": [
9
  {
10
  "name": "cloudflare/cf-ip-rewrite",
4
  "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5
  "This file is @generated automatically"
6
  ],
7
+ "content-hash": "44e8e8dbeecd283355cd4353b8ea868a",
8
  "packages": [
9
  {
10
  "name": "cloudflare/cf-ip-rewrite",
config.json CHANGED
@@ -25,5 +25,5 @@
25
  },
26
  "locale": "en",
27
  "integrationName": "wordpress",
28
- "version": "4.5.0"
29
  }
25
  },
26
  "locale": "en",
27
  "integrationName": "wordpress",
28
+ "version": "4.5.1"
29
  }
output.log CHANGED
@@ -32,25 +32,26 @@ php-7.4-build2: Pulling from cloudflare/cloudflare-wordpress/php-actions_compose
32
  320f26ee9b1c: Download complete
33
  30e209609427: Verifying Checksum
34
  30e209609427: Download complete
 
35
  801bfaa63ef2: Download complete
 
36
  4612e05a72cf: Verifying Checksum
37
  4612e05a72cf: Download complete
38
- 801bfaa63ef2: Pull complete
39
  79c03e12047a: Verifying Checksum
40
  79c03e12047a: Download complete
41
- 30e209609427: Pull complete
42
  320f26ee9b1c: Pull complete
43
  9b2beae78beb: Verifying Checksum
44
  9b2beae78beb: Download complete
45
  4612e05a72cf: Pull complete
46
- 51393fef6543: Verifying Checksum
47
- 51393fef6543: Download complete
48
  5571c1cd7f43: Verifying Checksum
49
  5571c1cd7f43: Download complete
50
- 9b2beae78beb: Pull complete
 
51
  65564f077fec: Verifying Checksum
52
  65564f077fec: Download complete
53
- 79c03e12047a: Pull complete
54
  4d1e94121e00: Verifying Checksum
55
  4d1e94121e00: Download complete
56
  51393fef6543: Pull complete
@@ -63,22 +64,3 @@ docker.pkg.github.com/cloudflare/cloudflare-wordpress/php-actions_composer_cloud
63
  Docker tag: docker.pkg.github.com/cloudflare/cloudflare-wordpress/php-actions_composer_cloudflare-wordpress:php-7.4-build2
64
  No private keys supplied
65
  Command: composer install --no-dev --no-progress --no-interaction
66
- Running php-build composer
67
- WARNING! Your password will be stored unencrypted in /home/runner/.docker/config.json.
68
- Configure a credential helper to remove this warning. See
69
- https://docs.docker.com/engine/reference/commandline/login/#credentials-store
70
-
71
- Login Succeeded
72
- Pulling docker.pkg.github.com/cloudflare/cloudflare-wordpress/php-actions_composer_cloudflare-wordpress:php-7.4-build2
73
- WARNING: ⚠️ Failed to pull manifest by the resolved digest. This registry does not
74
- appear to conform to the distribution registry specification; falling back to
75
- pull by tag. This fallback is DEPRECATED, and will be removed in a future
76
- release. Please contact admins of https://docker.pkg.github.com. ⚠️
77
-
78
- php-7.4-build2: Pulling from cloudflare/cloudflare-wordpress/php-actions_composer_cloudflare-wordpress
79
- Digest: sha256:fe3e5fd68143f1f18e31c3809077c110c3be05484a88924a3088d3fcecde0289
80
- Status: Image is up to date for docker.pkg.github.com/cloudflare/cloudflare-wordpress/php-actions_composer_cloudflare-wordpress:php-7.4-build2
81
- docker.pkg.github.com/cloudflare/cloudflare-wordpress/php-actions_composer_cloudflare-wordpress:php-7.4-build2
82
- Docker tag: docker.pkg.github.com/cloudflare/cloudflare-wordpress/php-actions_composer_cloudflare-wordpress:php-7.4-build2
83
- No private keys supplied
84
- Command: composer run-script remove-php-8-symfony-polyfill-bootstraps --no-interaction
32
  320f26ee9b1c: Download complete
33
  30e209609427: Verifying Checksum
34
  30e209609427: Download complete
35
+ 801bfaa63ef2: Verifying Checksum
36
  801bfaa63ef2: Download complete
37
+ 801bfaa63ef2: Pull complete
38
  4612e05a72cf: Verifying Checksum
39
  4612e05a72cf: Download complete
40
+ 30e209609427: Pull complete
41
  79c03e12047a: Verifying Checksum
42
  79c03e12047a: Download complete
 
43
  320f26ee9b1c: Pull complete
44
  9b2beae78beb: Verifying Checksum
45
  9b2beae78beb: Download complete
46
  4612e05a72cf: Pull complete
47
+ 9b2beae78beb: Pull complete
48
+ 79c03e12047a: Pull complete
49
  5571c1cd7f43: Verifying Checksum
50
  5571c1cd7f43: Download complete
51
+ 51393fef6543: Verifying Checksum
52
+ 51393fef6543: Download complete
53
  65564f077fec: Verifying Checksum
54
  65564f077fec: Download complete
 
55
  4d1e94121e00: Verifying Checksum
56
  4d1e94121e00: Download complete
57
  51393fef6543: Pull complete
64
  Docker tag: docker.pkg.github.com/cloudflare/cloudflare-wordpress/php-actions_composer_cloudflare-wordpress:php-7.4-build2
65
  No private keys supplied
66
  Command: composer install --no-dev --no-progress --no-interaction
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: icyapril, manatarms, thillcf, deuill, epatryk, jacobbednarz
3
  Tags: cloudflare, seo, ssl, ddos, speed, security, cdn, performance, free
4
  Requires at least: 3.4
5
  Tested up to: 5.6
6
- Stable tag: 4.5.0
7
  Requires PHP: 7.2
8
  License: BSD-3-Clause
9
 
@@ -102,6 +102,10 @@ Yes, Cloudflare works with, and helps speed up your site even more, if you have
102
 
103
  == Changelog ==
104
 
 
 
 
 
105
  = 4.5.0 - 2021-06-02 =
106
 
107
  * Document unintuitive `transition_post_status` WP hook behavior
3
  Tags: cloudflare, seo, ssl, ddos, speed, security, cdn, performance, free
4
  Requires at least: 3.4
5
  Tested up to: 5.6
6
+ Stable tag: 4.5.1
7
  Requires PHP: 7.2
8
  License: BSD-3-Clause
9
 
102
 
103
  == Changelog ==
104
 
105
+ = 4.5.1 - 2021-06-03 =
106
+
107
+ * Rewrite PHP 8 bootstrap files for `symfony/polyfill` to be PHP 7 compatible
108
+
109
  = 4.5.0 - 2021-06-02 =
110
 
111
  * Document unintuitive `transition_post_status` WP hook behavior
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit386a6fce91e17b37d63cb251597d5bd5::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit06e3240e7f185972289dfc9be7883e23::getLoader();
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit386a6fce91e17b37d63cb251597d5bd5
6
  {
7
  private static $loader;
8
 
@@ -22,15 +22,15 @@ class ComposerAutoloaderInit386a6fce91e17b37d63cb251597d5bd5
22
  return self::$loader;
23
  }
24
 
25
- spl_autoload_register(array('ComposerAutoloaderInit386a6fce91e17b37d63cb251597d5bd5', 'loadClassLoader'), true, true);
26
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
27
- spl_autoload_unregister(array('ComposerAutoloaderInit386a6fce91e17b37d63cb251597d5bd5', 'loadClassLoader'));
28
 
29
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
30
  if ($useStaticLoader) {
31
  require_once __DIR__ . '/autoload_static.php';
32
 
33
- call_user_func(\Composer\Autoload\ComposerStaticInit386a6fce91e17b37d63cb251597d5bd5::getInitializer($loader));
34
  } else {
35
  $map = require __DIR__ . '/autoload_namespaces.php';
36
  foreach ($map as $namespace => $path) {
@@ -51,19 +51,19 @@ class ComposerAutoloaderInit386a6fce91e17b37d63cb251597d5bd5
51
  $loader->register(true);
52
 
53
  if ($useStaticLoader) {
54
- $includeFiles = Composer\Autoload\ComposerStaticInit386a6fce91e17b37d63cb251597d5bd5::$files;
55
  } else {
56
  $includeFiles = require __DIR__ . '/autoload_files.php';
57
  }
58
  foreach ($includeFiles as $fileIdentifier => $file) {
59
- composerRequire386a6fce91e17b37d63cb251597d5bd5($fileIdentifier, $file);
60
  }
61
 
62
  return $loader;
63
  }
64
  }
65
 
66
- function composerRequire386a6fce91e17b37d63cb251597d5bd5($fileIdentifier, $file)
67
  {
68
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
69
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit06e3240e7f185972289dfc9be7883e23
6
  {
7
  private static $loader;
8
 
22
  return self::$loader;
23
  }
24
 
25
+ spl_autoload_register(array('ComposerAutoloaderInit06e3240e7f185972289dfc9be7883e23', 'loadClassLoader'), true, true);
26
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
27
+ spl_autoload_unregister(array('ComposerAutoloaderInit06e3240e7f185972289dfc9be7883e23', 'loadClassLoader'));
28
 
29
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
30
  if ($useStaticLoader) {
31
  require_once __DIR__ . '/autoload_static.php';
32
 
33
+ call_user_func(\Composer\Autoload\ComposerStaticInit06e3240e7f185972289dfc9be7883e23::getInitializer($loader));
34
  } else {
35
  $map = require __DIR__ . '/autoload_namespaces.php';
36
  foreach ($map as $namespace => $path) {
51
  $loader->register(true);
52
 
53
  if ($useStaticLoader) {
54
+ $includeFiles = Composer\Autoload\ComposerStaticInit06e3240e7f185972289dfc9be7883e23::$files;
55
  } else {
56
  $includeFiles = require __DIR__ . '/autoload_files.php';
57
  }
58
  foreach ($includeFiles as $fileIdentifier => $file) {
59
+ composerRequire06e3240e7f185972289dfc9be7883e23($fileIdentifier, $file);
60
  }
61
 
62
  return $loader;
63
  }
64
  }
65
 
66
+ function composerRequire06e3240e7f185972289dfc9be7883e23($fileIdentifier, $file)
67
  {
68
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
69
  require $file;
vendor/composer/autoload_static.php CHANGED
@@ -4,7 +4,7 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit386a6fce91e17b37d63cb251597d5bd5
8
  {
9
  public static $files = array (
10
  '25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php',
@@ -70,10 +70,10 @@ class ComposerStaticInit386a6fce91e17b37d63cb251597d5bd5
70
  public static function getInitializer(ClassLoader $loader)
71
  {
72
  return \Closure::bind(function () use ($loader) {
73
- $loader->prefixLengthsPsr4 = ComposerStaticInit386a6fce91e17b37d63cb251597d5bd5::$prefixLengthsPsr4;
74
- $loader->prefixDirsPsr4 = ComposerStaticInit386a6fce91e17b37d63cb251597d5bd5::$prefixDirsPsr4;
75
- $loader->prefixesPsr0 = ComposerStaticInit386a6fce91e17b37d63cb251597d5bd5::$prefixesPsr0;
76
- $loader->classMap = ComposerStaticInit386a6fce91e17b37d63cb251597d5bd5::$classMap;
77
 
78
  }, null, ClassLoader::class);
79
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit06e3240e7f185972289dfc9be7883e23
8
  {
9
  public static $files = array (
10
  '25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php',
70
  public static function getInitializer(ClassLoader $loader)
71
  {
72
  return \Closure::bind(function () use ($loader) {
73
+ $loader->prefixLengthsPsr4 = ComposerStaticInit06e3240e7f185972289dfc9be7883e23::$prefixLengthsPsr4;
74
+ $loader->prefixDirsPsr4 = ComposerStaticInit06e3240e7f185972289dfc9be7883e23::$prefixDirsPsr4;
75
+ $loader->prefixesPsr0 = ComposerStaticInit06e3240e7f185972289dfc9be7883e23::$prefixesPsr0;
76
+ $loader->classMap = ComposerStaticInit06e3240e7f185972289dfc9be7883e23::$classMap;
77
 
78
  }, null, ClassLoader::class);
79
  }
vendor/symfony/polyfill-intl-idn/bootstrap80.php ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Symfony package.
5
+ *
6
+ * (c) Fabien Potencier <fabien@symfony.com>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ use Symfony\Polyfill\Intl\Idn as p;
13
+
14
+ if (!defined('U_IDNA_PROHIBITED_ERROR')) {
15
+ define('U_IDNA_PROHIBITED_ERROR', 66560);
16
+ }
17
+ if (!defined('U_IDNA_ERROR_START')) {
18
+ define('U_IDNA_ERROR_START', 66560);
19
+ }
20
+ if (!defined('U_IDNA_UNASSIGNED_ERROR')) {
21
+ define('U_IDNA_UNASSIGNED_ERROR', 66561);
22
+ }
23
+ if (!defined('U_IDNA_CHECK_BIDI_ERROR')) {
24
+ define('U_IDNA_CHECK_BIDI_ERROR', 66562);
25
+ }
26
+ if (!defined('U_IDNA_STD3_ASCII_RULES_ERROR')) {
27
+ define('U_IDNA_STD3_ASCII_RULES_ERROR', 66563);
28
+ }
29
+ if (!defined('U_IDNA_ACE_PREFIX_ERROR')) {
30
+ define('U_IDNA_ACE_PREFIX_ERROR', 66564);
31
+ }
32
+ if (!defined('U_IDNA_VERIFICATION_ERROR')) {
33
+ define('U_IDNA_VERIFICATION_ERROR', 66565);
34
+ }
35
+ if (!defined('U_IDNA_LABEL_TOO_LONG_ERROR')) {
36
+ define('U_IDNA_LABEL_TOO_LONG_ERROR', 66566);
37
+ }
38
+ if (!defined('U_IDNA_ZERO_LENGTH_LABEL_ERROR')) {
39
+ define('U_IDNA_ZERO_LENGTH_LABEL_ERROR', 66567);
40
+ }
41
+ if (!defined('U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR')) {
42
+ define('U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR', 66568);
43
+ }
44
+ if (!defined('U_IDNA_ERROR_LIMIT')) {
45
+ define('U_IDNA_ERROR_LIMIT', 66569);
46
+ }
47
+ if (!defined('U_STRINGPREP_PROHIBITED_ERROR')) {
48
+ define('U_STRINGPREP_PROHIBITED_ERROR', 66560);
49
+ }
50
+ if (!defined('U_STRINGPREP_UNASSIGNED_ERROR')) {
51
+ define('U_STRINGPREP_UNASSIGNED_ERROR', 66561);
52
+ }
53
+ if (!defined('U_STRINGPREP_CHECK_BIDI_ERROR')) {
54
+ define('U_STRINGPREP_CHECK_BIDI_ERROR', 66562);
55
+ }
56
+ if (!defined('IDNA_DEFAULT')) {
57
+ define('IDNA_DEFAULT', 0);
58
+ }
59
+ if (!defined('IDNA_ALLOW_UNASSIGNED')) {
60
+ define('IDNA_ALLOW_UNASSIGNED', 1);
61
+ }
62
+ if (!defined('IDNA_USE_STD3_RULES')) {
63
+ define('IDNA_USE_STD3_RULES', 2);
64
+ }
65
+ if (!defined('IDNA_CHECK_BIDI')) {
66
+ define('IDNA_CHECK_BIDI', 4);
67
+ }
68
+ if (!defined('IDNA_CHECK_CONTEXTJ')) {
69
+ define('IDNA_CHECK_CONTEXTJ', 8);
70
+ }
71
+ if (!defined('IDNA_NONTRANSITIONAL_TO_ASCII')) {
72
+ define('IDNA_NONTRANSITIONAL_TO_ASCII', 16);
73
+ }
74
+ if (!defined('IDNA_NONTRANSITIONAL_TO_UNICODE')) {
75
+ define('IDNA_NONTRANSITIONAL_TO_UNICODE', 32);
76
+ }
77
+ if (!defined('INTL_IDNA_VARIANT_UTS46')) {
78
+ define('INTL_IDNA_VARIANT_UTS46', 1);
79
+ }
80
+ if (!defined('IDNA_ERROR_EMPTY_LABEL')) {
81
+ define('IDNA_ERROR_EMPTY_LABEL', 1);
82
+ }
83
+ if (!defined('IDNA_ERROR_LABEL_TOO_LONG')) {
84
+ define('IDNA_ERROR_LABEL_TOO_LONG', 2);
85
+ }
86
+ if (!defined('IDNA_ERROR_DOMAIN_NAME_TOO_LONG')) {
87
+ define('IDNA_ERROR_DOMAIN_NAME_TOO_LONG', 4);
88
+ }
89
+ if (!defined('IDNA_ERROR_LEADING_HYPHEN')) {
90
+ define('IDNA_ERROR_LEADING_HYPHEN', 8);
91
+ }
92
+ if (!defined('IDNA_ERROR_TRAILING_HYPHEN')) {
93
+ define('IDNA_ERROR_TRAILING_HYPHEN', 16);
94
+ }
95
+ if (!defined('IDNA_ERROR_HYPHEN_3_4')) {
96
+ define('IDNA_ERROR_HYPHEN_3_4', 32);
97
+ }
98
+ if (!defined('IDNA_ERROR_LEADING_COMBINING_MARK')) {
99
+ define('IDNA_ERROR_LEADING_COMBINING_MARK', 64);
100
+ }
101
+ if (!defined('IDNA_ERROR_DISALLOWED')) {
102
+ define('IDNA_ERROR_DISALLOWED', 128);
103
+ }
104
+ if (!defined('IDNA_ERROR_PUNYCODE')) {
105
+ define('IDNA_ERROR_PUNYCODE', 256);
106
+ }
107
+ if (!defined('IDNA_ERROR_LABEL_HAS_DOT')) {
108
+ define('IDNA_ERROR_LABEL_HAS_DOT', 512);
109
+ }
110
+ if (!defined('IDNA_ERROR_INVALID_ACE_LABEL')) {
111
+ define('IDNA_ERROR_INVALID_ACE_LABEL', 1024);
112
+ }
113
+ if (!defined('IDNA_ERROR_BIDI')) {
114
+ define('IDNA_ERROR_BIDI', 2048);
115
+ }
116
+ if (!defined('IDNA_ERROR_CONTEXTJ')) {
117
+ define('IDNA_ERROR_CONTEXTJ', 4096);
118
+ }
119
+
120
+ if (!function_exists('idn_to_ascii')) {
121
+ function idn_to_ascii(?string $domain, ?int $flags = 0, ?int $variant = INTL_IDNA_VARIANT_UTS46, &$idna_info = null) { return p\Idn::idn_to_ascii((string) $domain, (int) $flags, (int) $variant, $idna_info); }
122
+ }
123
+ if (!function_exists('idn_to_utf8')) {
124
+ function idn_to_utf8(?string $domain, ?int $flags = 0, ?int $variant = INTL_IDNA_VARIANT_UTS46, &$idna_info = null) { return p\Idn::idn_to_utf8((string) $domain, (int) $flags, (int) $variant, $idna_info); }
125
+ }
vendor/symfony/polyfill-intl-normalizer/bootstrap80.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of the Symfony package.
5
+ *
6
+ * (c) Fabien Potencier <fabien@symfony.com>
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+
12
+ use Symfony\Polyfill\Intl\Normalizer as p;
13
+
14
+ if (!function_exists('normalizer_is_normalized')) {
15
+ function normalizer_is_normalized(?string $string, ?int $form = p\Normalizer::FORM_C): bool { return p\Normalizer::isNormalized((string) $string, (int) $form); }
16
+ }
17
+ if (!function_exists('normalizer_normalize')) {
18
+ function normalizer_normalize(?string $string, ?int $form = p\Normalizer::FORM_C) { return p\Normalizer::normalize((string) $string, (int) $form); }
19
+ }