Php 用于更改URL的正则表达式';s到小写

Php 用于更改URL的正则表达式';s到小写,php,regex,Php,Regex,我在几个由PHP和MySQL支持的网站上工作,我想把我所有的URL都改成小写,并用破折号替换下划线。因此,URL mysite/Topics/Tic__________________________________ 我想知道是否有人能推荐一个能自动完成这项工作的正则表达式。如果同时做两件事太多了,那么我希望至少能把所有的事情都改成小写。我可能可以找到另一种方法来替换下划线 我想更改的链接都是本地链接,大多数采用以下形式之一: <a href="/Topics/New_York title

我在几个由PHP和MySQL支持的网站上工作,我想把我所有的URL都改成小写,并用破折号替换下划线。因此,URL mysite/Topics/Tic__________________________________

我想知道是否有人能推荐一个能自动完成这项工作的正则表达式。如果同时做两件事太多了,那么我希望至少能把所有的事情都改成小写。我可能可以找到另一种方法来替换下划线

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

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

如果我问的问题太复杂,一个好的替代方法是使用正则表达式,它会影响以/Topics或/Topics开头的每个URL(我已经在一些文件中将/Topics更改为/Topics),如下所示

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

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


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

如果您的网站使用LINUX环境,并且您的URL是静态驱动的,恐怕没有解决方案,但要更改数据/文件/包含/调用,一切都由你自己完成-手动完成。在LINUX平台上,更改URL上的大写字母将同时影响核心文件和
.html
文件(如果您在开发过程中使用Windows平台开发VPS,则很难跟踪),那么友好的URL功能可能会受到影响。。当该网站登陆LINUX时,可能会出现真正的在线混乱

无论如何,如果您只想更改URL(您所要求的),您可以使用字符串拆分并使用此代码。只需将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;
//不更改URI的img类型选择。。
$nochange=array('.png'、'.gif'、'.jpg');
$uri=isset($\u服务器['REQUEST\u uri'])?strip_标记($_服务器['REQUEST_URI']):'';
//现在忽略服务器uri,让我们设置一些可能的、有问题的uri(完成后取消注释)
$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=(计数($variables)-1);
如果(preg#u匹配('.\.png$)|(\.jpg$)|(.gif$)#',$variables[count($variables)-1]))
{
$last=$variables[计数($variables)-1];
对于($i=0;$i<$ec;$i++)
{
$var.=$variables[$i]./';
}
$var=str_replace(“',“-”,$var);
$var=strtolower($var)。$last;
}
其他的
{
$var=str_replace(“',“-”,$var);
$var=strtolower($uri);
}
//最终回声
echo$var;

祝你好运

Regex可能不是解决您问题的好方法。请澄清一下,您正在寻找的是一个可在您的编辑软件中使用的Regex,PHP的唯一相关性是您正在使用的文本文件恰好是PHP源代码?是的,这是正确的。我甚至不应该提到PHP我的大部分工作都是用PHP完成的,不过我也学会了使用TextWrangler进行搜索和替换操作。我认为它的正则表达式函数与Dreamweaver的有点不同,尽管我不太了解细节。我应该补充一点,我知道PHP的strtolower函数,如@。此外,我还必须弄清楚如何将strtolower函数仅应用于本地链接(而不是图像链接)。@David Blomstrom Hey Dav id,只是想知道您是否从这个答案中找到了任何帮助。。?没事吧?对不起,直到今天我才有机会回去工作。我想我应该更清楚地解释一下,虽然我的站点是数据库驱动的,但这些特定的文件包含了内部链接。我想把大部分内容放到数据库中,但首先我想把所有的URL改成小写。所以我只是在寻找一种方便的方法,在我将所有内容放入数据库之前,使用Dreamweaver、TextWrangler或其他工具修改URL。不过,我认为我仍然可以使用您的脚本。当我发布我的升级时,我可以用它来纠正任何由于某种原因而没有得到修复的URL,直到我有机会完成这项工作。谢谢
    //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;