php - PHP Check Url and detect empty parameters parts
问题描述
I Have Url structure for multi language system like this:
for default language ie: en
localhost/cms
And Another Language Like:
localhost/cms/fr
localhost/cms/de
localhost/cms/es
Now I have this function for detect empty url language short name parts and set to default language:
function urlss(){
$uri = $_SERVER['REQUEST_URI'];
$languages = ['en', 'fr', 'es', 'de'];
// this is my default language
$defaultLang = 'en';
// $currentLang is the language I'll use to show the contents
$currentLang = $defaultLang;
$uri = ltrim(rawurldecode($uri), '/');
$parts = explode('/', $uri);
if( ! empty($parts) && in_array(strtolower($parts[0]), $languages)) {
$currentLang = array_shift($parts);
}
$routableUri = implode('/', $parts);
return $routableUri;
}
Check in Url: localhost/cms/
and Output Is: cms/
and not work true.
In action I need to check My url, if not detect language short name ie: en
default language = en
and then put in session
or cookie
But if detect language short name ie: fr
es
de
set session
or cookie
to this language.
How do can I fix my problem and check my url for language short name?!
解决方案
I would approach this problem using a regular expression.
// Prepare request URI, available languages and default language
$url = $_SERVER['REQUEST_URI'];
$languages = ['en', 'fr', 'es', 'de'];
$default = 'en';
// Build regular expression and attempt to match language in URL
preg_match('/^\/cms\/(' . implode('|', $languages) . ')\//', $url, $match);
// Set language to match or default to English
$language = $match[1] ?? $default;
// Remove default language from URL
$url = preg_replace("/\/{$default}/", '', $url);
推荐阅读
- c# - 统一悬停建筑物,然后再放置它们进行游戏
- api - 我可以使用 Musixmatch API 访问专辑的封面吗?
- prolog - 相邻涉及第一个和最后一个元素,Prolog
- arrays - 用分治法编写成本为 O(log(n)) 的 C 算法
- android - 将数据从基础活动传递到扩展它的活动
- api - Hello Bar webhook 与 Coldfusion 集成
- steam - 如何找到 Steam 游戏的最新版本 ID?
- python-3.x - tkinter 在 python-3.8 中未找到,而它在 python-3.5 中工作
- mongodb - 如何组合两个 MongoDB 聚合管道查询的结果并在不使用 $facet 的情况下对组合结果执行另一个聚合查询?
- java - 二叉树的打印边界