添加额外的点/句号/句点会导致重复的URL

时间:2012-11-13 16:45:38

标签: php wordpress sanitization

网站未正确链接到我的网站,在链接末尾添加了句号:

http://www.example.com/hello-world.

我原本希望这会转到404页面,相反,它会加载正确的页面,而不会重定向到有效的网址。

这将在搜索引擎中创建重复的内容问题。

看看其他一些Wordpress网站,似乎这是一个常见的问题,如果你输入任意数量的句号或连字符(只是我遇到的那对),页面会加载正确的内容:

http://www.example.com/hello-------world.......
http://www.example.com/hello-....world-----

是否有其他人遇到此问题并找到了解决方案?

我可以设置从链接网址到正​​确网址的重定向,但理想情况下我想找到一个解决方案,以便将来不会发生这种情况。

更新

我发现问题似乎是由于 /wp-includes/formatting.php(第954行)中的sanitize_title_with_dashes功能:

function sanitize_title_with_dashes($title, $raw_title = '', $context = 'display') {

    echo "1: " . $title . "<br />";

    $title = strip_tags($title);
    // Preserve escaped octets.
    $title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title);
    // Remove percent signs that are not part of an octet.
    $title = str_replace('%', '', $title);
    // Restore octets.
    $title = preg_replace('|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $title);

    if (seems_utf8($title)) {
        if (function_exists('mb_strtolower')) {
            $title = mb_strtolower($title, 'UTF-8');
        }
        $title = utf8_uri_encode($title, 200);
    }

    $title = strtolower($title);
    $title = preg_replace('/&.+?;/', '', $title); // kill entities
    $title = str_replace('.', '-', $title);

    echo "2: " . $title . "<br />";

    if ( 'save' == $context ) {
        // Convert nbsp, ndash and mdash to hyphens
        $title = str_replace( array( '%c2%a0', '%e2%80%93', '%e2%80%94' ), '-', $title );

        // Strip these characters entirely
        $title = str_replace( array(
            // iexcl and iquest
            '%c2%a1', '%c2%bf',
            // angle quotes
            '%c2%ab', '%c2%bb', '%e2%80%b9', '%e2%80%ba',
            // curly quotes
            '%e2%80%98', '%e2%80%99', '%e2%80%9c', '%e2%80%9d',
            '%e2%80%9a', '%e2%80%9b', '%e2%80%9e', '%e2%80%9f',
            // copy, reg, deg, hellip and trade
            '%c2%a9', '%c2%ae', '%c2%b0', '%e2%80%a6', '%e2%84%a2',
        ), '', $title );

        // Convert times to x
        $title = str_replace( '%c3%97', 'x', $title );
    }

    $title = preg_replace('/[^%a-z0-9 _-]/', '', $title);
    $title = preg_replace('/\s+/', '-', $title);
    $title = preg_replace('|-+|', '-', $title);
    $title = trim($title, '-');

    return $title;
}

似乎是用连字符替换句号,然后替换多个连字符,然后从URL的末尾修剪连字符。

更新

这似乎不是类别的问题,我想知道为什么当类别不是时,页面/帖子标题被清理到那个级别......

2 个答案:

答案 0 :(得分:0)

这是因为重写了url重写的方式。

您可能想要弄乱它来解决问题。它可以在.htaccess文件的网站文档根目录中找到。

答案 1 :(得分:0)

除非您或其他人故意链接到这些链接,否则搜索引擎不会将这些链接编入索引。基本上,我不会太担心它。

原因:

当接收URL slug时,WordPress可能会清理变量并删除不需要的字符。我怀疑它与实际的.htaccess文件有什么关系。