我正在尝试将以下文字重写为网址
$string="Jean-Maxime . Thäre! wouldn't %bé#äny ąśćłóżźń. OEß L'élève
% áàâãªä que voici est allé voir ça. Ils ont découvert où
elles avaient cachées la Sainte Bible ?! <h3>\"Je suis riche\"</h3> ";
并且我有3个函数但不知何故它为其中一个函数返回以下错误警告:preg_replace():编译失败:偏移1处的无效UTF-8字符串
服务器说错误在这一行
$text =preg_replace(array_keys($utf8), array_values($utf8), $text);
以下是我的3个功能:
function normaliser($string)
{
$string = strip_tags(mb_strtolower($string));
return preg_replace('~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8'));
}
################################################################################
//On enleve les accents et on normalise le texte
function enlever_accents($text) {
$utf8 = array(
'/[áàâãªä]/u' => 'a',
'/[ÁÀÂÃÄ]/u' => 'A',
'/[ÍÌÎÏ]/u' => 'I',
'/[íìîï]/u' => 'i',
'/[éèêë]/u' => 'e',
'/[ÉÈÊË]/u' => 'E',
'/[óòôõºö]/u' => 'o',
'/[ÓÒÔÕÖ]/u' => 'O',
'/[úùûü]/u' => 'u',
'/[ÚÙÛÜ]/u' => 'U',
'/ç/u' => 'c',
'/Ç/u' => 'C',
'/ñ/u' => 'n',
'/Ñ/u' => 'N',
'/[\²&~#"\'{(\[|`_\^\)°+=}*;:!§?%’,;]/u' => '', //J'enleve les caracteres speciaux
'/–/u' => '-', // UTF-8 hyphen to "normal" hyphen
'/[’‘‹›‚]/u' => ' ', // Literally a single quote
'/[“”«»„]/u' => ' ', // Double quote
'/ /u' => ' ', // nonbreaking space (equiv. to 0x160)
);
$text =preg_replace(array_keys($utf8), array_values($utf8), $text);
$text =mb_strtolower($text);
return normaliser($text);
}
#########################################################################
//Fonction qui permet de reecrire les urls
function reecrire_url_titre($string) {
$string= enlever_accents($string);
$string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens.
$string = preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars.
return preg_replace('/-+/', '-', $string); // Replaces multiple hyphens with single one.
}
问题主要出在这个
function enlever_accents($text) {
$utf8 = array(
'/[áàâãªä]/u' => 'a',
'/[ÁÀÂÃÄ]/u' => 'A',
'/[ÍÌÎÏ]/u' => 'I',
'/[íìîï]/u' => 'i',
'/[éèêë]/u' => 'e',
'/[ÉÈÊË]/u' => 'E',
'/[óòôõºö]/u' => 'o',
'/[ÓÒÔÕÖ]/u' => 'O',
'/[úùûü]/u' => 'u',
'/[ÚÙÛÜ]/u' => 'U',
'/ç/u' => 'c',
'/Ç/u' => 'C',
'/ñ/u' => 'n',
'/Ñ/u' => 'N',
'/[\²&~#"\'{(\[|`_\^\)°+=}*;:!§?%’,;]/u' => '', //J'enleve les caracteres speciaux
'/–/u' => '-', // UTF-8 hyphen to "normal" hyphen
'/[’‘‹›‚]/u' => ' ', // Literally a single quote
'/[“”«»„]/u' => ' ', // Double quote
'/ /u' => ' ', // nonbreaking space (equiv. to 0x160)
);
$text = htmlentities($text, ENT_QUOTES, 'UTF-8');
$text =preg_replace(array_keys($utf8), array_values($utf8), $text);
$text =mb_strtolower($text);
return $text;
}
请问如何解决警告:preg_replace():编译失败:偏移1处的UTF-8字符串无效?
答案 0 :(得分:1)
要用PHP替换重音字母,方法不是使用正则表达式(在您的情况下为几个),而是使用<ul>
<li><a [routerLink]="['/NewPage']">NewPage</a></li>
<li><a [routerLink]="['/EmployeeData']">Security Dashboard</a></li>
</ul>
<div>
<router-outlet></router-outlet>
</div>
:
iconv
您还需要确保您的字符串在UTF-8编码字符串的开头。否则,请在使用$yourstring = Normalizer::normalize($yourstring, Normalizer::NFC);
setlocale(LC_CTYPE, 'fr_FR');
$result = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $yourstring);
然后处理其他角色,如果我理解你的意图,你需要做的就是只做一次替换并修剪:
mb_convert
(在字符类中输入要保留的所有字符)
$result = trim(preg_replace('~[^a-z0-9]+~i', '-', $result), '-');