用于将URL更改为小写的正则表达式

时间:2014-03-22 00:03:54

标签: php regex

我正在几个由PHP和MySQL支持的网站上工作,并希望将我的所有网址更改为小写,并用破折号替换下划线。因此,URL mysite / Topics / Tic_Tac_Toe将更改为mysite / topics / tic-tac-toe。

我想知道是否有人可以建议一个能自动完成工作的正则表达式。如果一次做两件事太多了,那么我想至少能够把所有东西改成小写。我可能会找到另一种替换下划线的方法。

我想要更改的链接都是本地链接,大多数采用以下形式之一:

<a href="/Topics/New_York title="New York">New York</a>
<a href=<?php echo $GS_URL; >/Topics/New_York" title="New York/New York</a>
<a href='.$GS_URL.'/Topics/New_York" title="New York/New York</a>

但是,部分名称会有所不同,包括主题,参考,世界等。值$ GS_URL(代表域名)也会有所不同,包括$ GW_URL,$ GZ_URL和$ PX_URL。所以我认为简单地使用影响每个LOCAL链接的正则表达式是安全的;即每个不以http://开头的链接。另外,我不希望它影响到图片的链接,包括以下内容:

<a href="'.$PX_URL.'/images/Maps/US/Red_Blue_States.png" title="map">map</a>

如果我要求的内容过于复杂,那么一个好的替代方案就是正则表达式会影响以/ Topics或/ topics开头的每个网址(我已经更改/主题到/某些文件中的主题) ),像这样...

<a href="/Topics/New_York title="New York">New York</a>

然后我可以进行搜索和替换操作,然后将其从/ Topics更改为/ World - / world,然后/ Reference / / reference等。

另外,我应该提到我用来执行这些搜索和替换操作的软件是Dreamweaver和TextWrangler。

1 个答案:

答案 0 :(得分:0)

如果您的网站使用LINUX环境,如果您的网址是STATIC驱动的,那么您的问题无法解决,我担心,但更改数据/文件/包含/电话,一切都由您自己 - 手动。在LINUX平台上更改网址上的上限会影响核心和.html文件(如果你在开发过程中使用Windows平台工作,很难跟踪),那么可能友好的网址功能会受到影响。当网站登陆LINUX时,网上真是一团糟。

无论如何,如果你只想更改网址(你要问的是什么),你可以使用字符串拆分并玩这个代码。只需将c / p放入index.php中,如果给定的PHP代码结构有用,您将知道如何处理它。

    //choice of img types for uries not to be changed..
$nochange = array('.png','.gif','.jpg');


    $uri = isset($_SERVER['REQUEST_URI']) ? strip_tags($_SERVER['REQUEST_URI']) : '';

    //for now ignore server uri, lets set some possible, problematic uri (uncoment after youre done)
    $uri = 'www.extra.mysite/Topics/png/BomBastic/Tic_Tac_Toe-Candies/hoT_GIRls-OnA_Va-CAT-Ion.jpg';

    $urlvariables = (substr($uri, 0, 1) == '/') ? substr($uri, 1) : $uri;
    $variables = explode('/', $uri);
    $ec = (count($variables)-1);

     if(preg_match('#(\.png$)|(\.jpg$)|(.gif$)#', $variables[count($variables)-1]))
      {
        $last = $variables[count($variables)-1];

        for($i = 0; $i < $ec; $i++)
        {
        $var .= $variables[$i] . '/';
        }
       $var = str_replace('_', '-', $var);
       $var = strtolower($var) . $last;

      }
      else
      {
        $var = str_replace('_', '-', $var);
        $var = strtolower($uri);
      }

      //final echo
      echo $var;
祝你好运!