PHP:替换字符串中的字符对外(PHP: Replace Foreign Characters in

2019-10-16 16:21发布

$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()所以这不会是一个多行代码?

Answer 1:

只要你知道,这条线:

$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



Answer 2:

你可以把preg_replaces为主题的参数,这种方式有什么替换回报会的主题为anothe更换等等...



Answer 3:

此功能可以解决你的问题的一部分,我认为: http://www.php.net/manual/en/function.iconv.php将您的字符串转换成另一种字符集替换特殊字符。



Answer 4:

有没有错,多行代码或功能,它更清晰的阅读和工作方式相同的码长的线,这是因为如果事情是串行的 ,将保持连续,它需要执行的时间是一样的,如果你想加快你可以试着让并行线程对同一黑板串工作,但,这将是相当复杂的过程(你需要解决所有冲突的问题)。



Answer 5:

通过简单地用我的超级功能:

  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;
    }


Answer 6:

还有另一种方式来做到这一点,将你的字符串中去除仅口音。 我写此功能可在我的应用程序,它的语言是葡萄牙语使用上 - 这意味着它拥有你能想象的所有变音符号。 它的工作原理就像一个魅力:

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);

}



文章来源: PHP: Replace Foreign Characters in a String
标签: php oop function