$fileSyntax = strtolower(preg_replace('~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($fileSyntax, ENT_QUOTES, 'UTF-8'))); // remove foreign character accents
$fileSyntax = preg_replace("/[^a-zA-Z0-9\s]/", "", $fileSyntax); // remove anything that's not alphanumeric, or a space
$fileSyntax = preg_replace("/\s+/", "-", $fileSyntax); // replace space with hyphen
$fileSyntax = trim($fileSyntax, "-"); // removes prefixing and trailing hyphen
上面的代码将产生如下:
Pokémon = pokemon
YO MAN! = yo-man
我想改写这个效率,并在此后不久转换成一个功能。
我怎样才能使用多台preg_replace()
所以这不会是一个多行代码?
只要你知道,这条线:
$fileSyntax = preg_replace("/[^a-zA-Z0-9\s]/", "", $fileSyntax);
应包括连字符,或者你要阻止人们能够键入ice-skate
,它会成为iceskate,例如。
$fileSyntax = preg_replace("/[^a-zA-Z0-9\s-]/", "", $fileSyntax);
空间确实应该用连字符,因为可以的话可以使用下划线(在我看来)所取代。
同时,你可以为你的功能做到这一点:
function replace_chars($fileSyntax){
return strtolower(
preg_replace(
array(
"/&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);/i",
"/[^a-zA-Z0-9\s-]/i",
"/\s+/"
),
array(
"$1", // remove foreign character accents
"", // remove anything that's not alphanumeric, hyphen or a space
"_" // replace space with underscore
), htmlentities($fileSyntax, ENT_QUOTES, 'UTF-8')
)
);
}
它的代码,所有技术上一行,就隔开,使得它很容易阅读和理解正在发生的事情。 你会通过去叫它replace_chars("TeRríbLé(!) STRinG :)");
这应该返回terrible_string
你可以把preg_replaces为主题的参数,这种方式有什么替换回报会的主题为anothe更换等等...
此功能可以解决你的问题的一部分,我认为: http://www.php.net/manual/en/function.iconv.php将您的字符串转换成另一种字符集替换特殊字符。
有没有错,多行代码或功能,它更清晰的阅读和工作方式相同的码长的线,这是因为如果事情是串行的 ,将保持连续,它需要执行的时间是一样的,如果你想加快你可以试着让并行线程对同一黑板串工作,但,这将是相当复杂的过程(你需要解决所有冲突的问题)。
通过简单地用我的超级功能:
function text2url($chaine)
{
$chaine = htmlentities($chaine, ENT_NOQUOTES, 'utf-8');
$chaine = preg_replace('#\&([A-za-z])(?:uml|circ|tilde|acute|grave|cedil|ring)\;#', '\1', $chaine);
$chaine = preg_replace('#\&([A-za-z]{2})(?:lig)\;#', '\1', $chaine);
$chaine = preg_replace('#\&[^;]+\;#', '', $chaine);
$chaine = preg_replace('/[^a-zA-Z0-9_ %\[\]\.\(\)%&-]/s', '', $chaine);
$chaine = str_replace('(', '', $chaine);
$chaine = str_replace(')', '', $chaine);
$chaine = str_replace('[', '', $chaine);
$chaine = str_replace(']', '', $chaine);
$chaine = str_replace('.', '-', $chaine);
$chaine = trim($chaine);
$chaine = str_replace(' ', '_', $chaine);
return $chaine;
}
还有另一种方式来做到这一点,将你的字符串中去除仅口音。 我写此功能可在我的应用程序,它的语言是葡萄牙语使用上 - 这意味着它拥有你能想象的所有变音符号。 它的工作原理就像一个魅力:
function stripAccents($string){
$accents = '/&([A-Za-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml|caron);/';
$string_encoded = strtolower(htmlentities($string,ENT_NOQUOTES,'UTF-8'));
return $string_encoded = preg_replace($accents,'$1',$string_encoded);
}