在PHP中清理URL

时间:2016-05-24 08:02:30

标签: php zend-framework2 clean-urls

我想使用PHP ZF2框架“清理”我的URL。 URL如下:

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

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

testingtesting

此外,名称不一定是测试测试,它可以是测试,或任何其他名称,字符串的长度可以变化,这是我最困惑的。问题在这里,如何取出/ /行之间的所有内容,无论其大小......

P.S。到目前为止我所做的是以下内容:

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

返回以下内容:

/testingtesting/?inviter123

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

编辑:

我想在PHP中使用substr方法,我跳过字符串数组中的第一个元素,但是如何在/ hereitcanbeanysize /...

之间获取动态长度

试过罗伯特的解决方案,这就是我得到的:

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

现在我需要摆脱数组中“path”元素中的// ...我该怎么做?

3 个答案:

答案 0 :(得分:2)

您可以使用parse_url()功能并合并主机,方案和路径而无需查询部分。

检查此代码:

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

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

答案 1 :(得分:0)

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

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

.htaccess示例:

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

如果您只想显示干净的网址:

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

答案 2 :(得分:0)

如果您使用的是ZF2,则不应该使用本机PHP函数来处理这类事情,您应该使用RouteMach类来查找/检索匹配网址的片段:

'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

您正在使用框架,请确保您知道如何正确使用它。使用本地php方法(如substrparse_url)绝对是 NOT ,当您想要从网址中获取细分时,这种方法就可以了。

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