【问题标题】:Trailing dots being stripped from URL从 URL 中删除尾随点
【发布时间】:2010-02-26 19:07:28
【问题描述】:

我有一个 url - http://callisto/news/1st_February_is_here... - 它有三个尾随点,但是当它通过 mod_rewrite 并到达脚本(在 $_GET 中)时,点已被删除(但字符串的其余部分没问题)。

这是 htaccess 规则:

RewriteRule ^([^/]+)/(.*)$ index.php?__action=site&__filter=$1&__page=$2 [L,QSA]

谢谢。

【问题讨论】:

    标签: php .htaccess mod-rewrite get


    【解决方案1】:

    我认为您使用的是帖子的标题或类似于 URI 中的第三个位置的内容。由于使用这种方法您可能有很多其他“破坏”字符通过您的 URI,我建议您在将其附加到 URI 之前清理标题,并将相同的清理后的字符串放入您的数据库中以供参考。

    删除所有非字母数字字符并用连字符“-”替换空格——这将确保您不会混淆任何进一步的内容或遇到任何使您的 URI 无法正常工作的浏览器特定问题。

    $title = '1st February is here...';
    $clean_title = preg_replace('/[^a-zA-Z0-9\s]/', '', $title);
    $finished_title = str_replace(' ', '-', $clean_title);
    

    运行代码 aboce 将清除您的标题。

    http://callisto/news/1st_February_is_here...
    

    应该变成:

    http://callisto/news/1st-February-is-here
    

    或类似的东西。我建议使用连字符而不是下划线的唯一原因是我有时会遇到在 URI 中传递下划线的问题。

    另外,我认为您会发现这是 Wordpress 采用的方法——很可能与您看到此问题的原因相同。

    GL!

    【讨论】:

    • 不错的主意 - 我确实有一个函数可以对链接特殊字符进行编码和解码(但没有缓存)。当我有更多时间时,我可能会按照您的建议去做,因为这似乎更防弹,但坚持只是告诉客户在此期间不要这样做:)
    • @Meep3d - 让客户做你要求他们做的事情,祝你好运。我想这可能是第一次。 :P
    猜你喜欢
    • 1970-01-01
    • 2021-06-25
    • 2016-08-29
    • 2011-01-03
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 2012-07-01
    • 2012-07-02
    相关资源
    最近更新 更多