我想使用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”元素中的// ...我该怎么做?
答案 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方法(如substr
和parse_url
)绝对是 NOT ,当您想要从网址中获取细分时,这种方法就可以了。
查看教程以熟悉ZF2基础知识,例如ZF2 skeleton application (also known as the album application)