diff --git a/core/modules/link/src/Plugin/migrate/process/FieldLink.php b/core/modules/link/src/Plugin/migrate/process/FieldLink.php index 79642f7..353a89c 100644 --- a/core/modules/link/src/Plugin/migrate/process/FieldLink.php +++ b/core/modules/link/src/Plugin/migrate/process/FieldLink.php @@ -69,8 +69,79 @@ protected function canonicalizeUri($uri) { $uri = substr($uri, strlen('')); } else { - // A list of unicode-encoded characters that could be included in a uri. - $link_ichars = '¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿŒœŠšŸŽžƒ'; + // List of unicode-encoded characters that were allowed in URLs, + // according to link module in Drupal 7. + // @see http://cgit.drupalcode.org/link/tree/link.module?h=7.x-1.5-beta2#n1382 + $link_ichars = implode('', [ + "¿", // ¿ + "À", // À + "Á", // Á + "Â", //  + "Ã", // à + "Ä", // Ä + "Å", // Å + "Æ", // Æ + "Ç", // Ç + "È", // È + "É", // É + "Ê", // Ê + "Ë", // Ë + "Ì", // Ì + "Í", // Í + "Î", // Î + "Ï", // Ï + "Ð", // Ð + "Ñ", // Ñ + "Ò", // Ò + "Ó", // Ó + "Ô", // Ô + "Õ", // Õ + "Ö", // Ö + // × × + "Ø", // Ø + "Ù", // Ù + "Ú", // Ú + "Û", // Û + "Ü", // Ü + "Ý", // Ý + "Þ", // Þ + "ß", // ß + "à", // à + "á", // á + "â", // â + "ã", // ã + "ä", // ä + "å", // å + "æ", // æ + "ç", // ç + "è", // è + "é", // é + "ê", // ê + "ë", // ë + "ì", // ì + "í", // í + "î", // î + "ï", // ï + "ð", // ð + "ñ", // ñ + "ò", // ò + "ó", // ó + "ô", // ô + "õ", // õ + "ö", // ö + // ÷ ÷ + "ø", // ø + "ù", // ù + "ú", // ú + "û", // û + "ü", // ü + "ý", // ý + "þ", // þ + "ÿ", // ÿ + "Œ", // Œ + "œ", // œ + "Ÿ", // Ÿ + ]); // Pattern specific to internal links. $internal_pattern = "/^(?:[a-z0-9" . $link_ichars . "_\-+\[\] ]+)"; @@ -85,9 +156,7 @@ protected function canonicalizeUri($uri) { if (!preg_match($internal_pattern . $end, $uri)) { $allowed_protocols = ['http', 'https', 'ftp', 'news', 'nntp', 'telnet', 'mailto', 'irc', 'ssh', 'sftp', 'webcal']; - // List of domains that were allowed in Drupal 6 & Drupal 7 (so we are - // not interested in others). - $link_domains = 'aero|arpa|asia|biz|com|cat|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel|mobi|local'; + $link_domains = '[a-z][a-z0-9-]{1,62}'; // Starting a parenthesis group with (?: means that it is grouped, but is not captured $protocol = '((?:' . implode("|", $allowed_protocols) . '):\/\/)';