在 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)
我想 "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)