从变量中的URL获取id时遇到问题!
网址就像这样domain.com/article/1123/
和许多id
的动态相似我想将1123保存在变量中请帮忙!
尝试了这个
if(isset($_GET['id']) && !preg_match('/[0-9]{4}[a-zA-Z]{0,2}/', $_GET['id'], $id)) {
require_once('404.php');
} else {
$id = $_GET['id'];
}
答案 0 :(得分:6)
答案 1 :(得分:4)
我会这样做:
/
。<强>代码强>
$url = $_SERVER[REQUEST_URI];
$url = explode("/", $url);
$id = $url[count($url) - 1];
答案 2 :(得分:2)
您绝对应该使用parse_url
选择网址的正确部分 - 以防网址上存在?query
或#fragment
$parts = explode('/', parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));
$parts[0]; // 'domain.com'
$parts[1]; // 'article'
$parts[2]; // '1123'
您可能也想将这些作为名称引用。您可以使用array_combine
$params = array_combine(['domain', 'resource', 'id'], $parts);
$params['domain']; // 'domain.com'
$params['resource']; // 'article'
$params['id']; // '1123'
我现在真的感觉像拖拉机,所以我给你做了一个小路由器。你现在不必费心解剖这个问题;首先要学会如何使用它,然后你可以稍后将它拆开。
function makeRouter ($routes, callable $else) {
return function ($url) use ($routes, $else) {
foreach ($routes as $route => $handler) {
if (preg_match(makeRouteMatcher($route), $url, $values)) {
call_user_func_array($handler, array_slice($values, 1));
return;
}
}
call_user_func($else, $url);
};
}
function makeRouteMatcher ($route) {
return sprintf('#^%s$#', preg_replace('#:([^/]+)#', '([^/]+)', $route));
}
function route404 ($url) {
echo "No matching route: $url";
}
好的,所以我们在这里定义我们的路线以及应该在每条路线上发生的事情
// create a router instance with your route patterns and handlers
$router = makeRouter([
'/:domain/:resource/:id' => function ($domain, $resource, $id) {
echo "domain:$domain, resource:$resource, id:$id", PHP_EOL;
},
'/public/:filename' => function ($filename) {
echo "serving up file: $filename", PHP_EOL;
},
'/' => function () {
echo "root url!", PHP_EOL;
}
], 'route404');
现在让它看看我们的出价......
$router('/domain.com/article/1123');
// domain:domain.com, resource:article, id:1123
$router('/public/cats.jpg');
// serving up file: cats.jpg
$router('/');
// root url!
$router('what?');
// No matching route: what?
是的,我真的 对我目前的工作任务感到厌烦......
答案 3 :(得分:1)
这可以很简单。首先,您应该使用包含URL的字符串创建变量。这可以使用$_SERVER
数组完成。其中包含有关您的服务器的信息,以及您实际所在的网址。
第二点是拆分URL。这可以通过不同的方式完成,我喜欢使用p_reg函数来拆分它。在您的情况下,您希望在每个/
之后进行拆分,因为这样您就可以在每个&#34;目录中使用一个数组&#34;您的网址。
之后,它只是在数组中选择正确的位置。
$path = $_SERVER['REQUEST_URI']; // /article/1123/
$folders = preg_split('/', $path); // splits folders in array
$your_id = $folders[1];
答案 4 :(得分:1)
要彻底,您需要从parse_url()开始。
<?xml version="1.0" encoding="utf-8"?>
<[package].MultiLineRadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:multi_line_radio_group="http://schemas.android.com/apk/res-auto"
android:id="@+id/multi_line_radio_group"
android:layout_width="match_parent"
android:layout_height="match_parent"
multi_line_radio_group:max_in_row="3"
multi_line_radio_group:radio_buttons="@array/radio_buttons" />
这将为您提供一个包含少量键的数组。你正在寻找的是道路。
将路径拆分为/并取最后一个路径。
$parts=parse_url("domain.com/article/1123/");
您的ID现在位于$path_parts=explode('/', $parts['path']);