在 PHP 中清理 URL

Cleaning up URL in PHP

我想 "clean up" 我的 URL 使用 PHP ZF2 框架。 URL 如下所示:

http://sitename.com/testingtesting/?inviter123

站点名称和查询字符串参数之间的部分是我要删除的部分:

testingtesting

此外,名称不一定是testingtesting,它可以是test,或任何其他名称,字符串的长度可以变化,这是让我最困惑的地方。问题来了,如何把//行之间的所有东西都取出来,不管它的大小...

P.S。到目前为止我所做的如下:

 $controllerName =  substr($_SERVER["REQUEST_URI"],1,10);

其中returns我以下:

/testingtesting/?inviter123

现在的问题是如何去除字符串中不需要的内容...

编辑:

我想在 PHP 中使用 substr 方法,我跳过了字符串数组中的第一个元素,但是如何获取 /hereitcanbeanysize/ 之间的动态长度...

尝试过 Robert 的解决方案,这是我得到的:

array(4) { ["scheme"]=> string(4) "http" ["host"]=> string(12) "sitename.com" ["path"]=> string(16) "/testingtesting/" ["query"]=> string(10) "inviter123" }

现在我需要删除数组 "path" 元素中的 //...我该怎么做?

您可以使用parse_url() 函数并在没有查询部分的情况下合并主机、方案和路径。

检查此代码:

$urlParts = parse_url('http://sitename.com/testingtesting/?inviter123');

echo str_replace('/' , '', $urlParts['path']);

我认为做你想做的最好的方法是重写 url 在: .htaccess - 如果您使用 Apache 服务器-,或 web.config - 如果您使用 IIS-.

此外,您可以在查询字符串之前捕获字符串名称,以便在您的应用程序逻辑中使用它。

.htaccess 示例:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/testingtesting/(.*) / [QSA]

如果你只想显示干净的url:

$cleanUrl = str_replace('/testingtesting','', $_SERVER["REQUEST_URI"]);

如果您使用的是 ZF2,则不应将本机 php 函数用于此类事情,您应该使用 RouteMach class 到 find/retrieve 段匹配 url:

'route_name' => array(
    'type' => 'segment',
    'options' => array(
        'route' => '/:controller[/:action]',
        'constraints' => array(
            'controller' => '[a-zA-Z][a-zA-Z0-9_-]+',
            'action'     => '[a-zA-Z][a-zA-Z0-9_-]+',
        ),
        'defaults' => array(
            'controller' => 'Application\Controller\IndexController',
            'action'     => 'index',
        ),
    )
)

现在您可以从路由匹配中获取控制器和动作(Zend\Mvc\Router\RouteMatch);

/** @var MvcEvent $event */
$routeMatch = $event->getRouteMatch();
$controller = $routeMatch->getParam('controller');
$action = $routeMatch->getParam('action');

同时检查 the ZF2 documentation on Routing here

您正在使用一个框架,确保您知道如何正确使用它。当您想从 url.

查看教程以熟悉 ZF2 基础知识,例如 ZF2 skeleton application (also known as the album application)