PHP代码解释问题。

时间:2011-07-28 14:42:48

标签: php

如果我错了,我不知道这个问题是否适合这个问题。

我想知道是否有人可以详细向我解释以下3个代码段的内容。

Snippet 1

if($str !== mb_convert_encoding(mb_convert_encoding($str, 'UTF-32', 'UTF-8'), 'UTF-8', 'UTF-32')){
    $str = mb_convert_encoding($str, 'UTF-8');
}

Snippet 2

$str = preg_replace('`&([a-z]{1,2})(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig);`i', '\\1', $str);

摘录3

$str = preg_replace(array('`[^a-z0-9]`i','`[-]+`'), '-', $str); 

以下是完整的代码供参考。

function to_permalink($str){
    if($str !== mb_convert_encoding(mb_convert_encoding($str, 'UTF-32', 'UTF-8'), 'UTF-8', 'UTF-32')){
        $str = mb_convert_encoding($str, 'UTF-8');
    }
        $str = htmlentities($str, ENT_NOQUOTES, 'UTF-8');
        $str = preg_replace('`&([a-z]{1,2})(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig);`i', '\\1', $str);
        $str = html_entity_decode($str, ENT_NOQUOTES, 'UTF-8');
        $str = preg_replace(array('`[^a-z0-9]`i','`[-]+`'), '-', $str);
        $str = strtolower(trim($str, '-'));
        return $str;
}

3 个答案:

答案 0 :(得分:6)

Snippet 1确保字符串采用UTF-8编码。

Snippet 2将所有特殊字符转换为其基本形式(即'é' - >'e')。

代码段3会将空格转换为连字符( - )。

总而言之,考虑到功能的名称和内容,我会说它用于制作URL友好链接,例如转换

  

我发现了一个新的法语单词:église

  

我发现的-A-新 - 法语的单词埃格利斯

通常用于搜索引擎优化。

答案 1 :(得分:0)

您可以通过查找代码中的功能来解答您的许多问题。

到这里开始:http://php.net/docs.php

答案 2 :(得分:0)

Snippet#1:通过从源 - >往返转换来检查字符串是否是有效的UTF-8数据; UTF-32 - > UTF-8。如果结果与输入不同,则尝试让MB库确定输入编码并输出为UTF-8,无论如何。似乎是徒劳无功的。

Snippet#2:查找一系列潜在的字符实体(在这种情况下为重音字符),如果匹配并添加反斜杠,则删除前导&并尾随;。因此Æ变为\AElig

摘录#3:将任何非a-z0-9字符或1个或多个-的字符转换为单个-