Php 检索并整理url中的一个目录名。e、 g.我需要example.com/main/this_dir/page.html作为";本目录;

Php 检索并整理url中的一个目录名。e、 g.我需要example.com/main/this_dir/page.html作为";本目录;,php,Php,我正在努力理解如何完成以下任务” 发件人:http://www.example.com/main/this_dir/page.html 我希望输出:此目录 使用$\u服务器['REQUEST\u URI']时,我可以得到以下输出: */主/本目录/* 现在,我想把这两个/之间的最后一根线剥掉,这样我就可以 *这是迪尔* 然后我想把那根线变成 此目录 这也有一点复杂,因为目录可以简单地称为/this/而不是/this_dir/,但它总是一个或另一个,文本确实会发生变化,而我使用的单词只是一个示例

我正在努力理解如何完成以下任务”

发件人:
http://www.example.com/main/this_dir/page.html

我希望输出:此目录

使用
$\u服务器['REQUEST\u URI']
时,我可以得到以下输出:

*/主/本目录/*

现在,我想把这两个/之间的最后一根线剥掉,这样我就可以

*这是迪尔*

然后我想把那根线变成

此目录

这也有一点复杂,因为目录可以简单地称为/this/而不是/this_dir/,但它总是一个或另一个,文本确实会发生变化,而我使用的单词只是一个示例

如果有人对我如何完成这项任务有任何建议、意见或反馈,我将不胜感激!我确实对如何从request_uri字符串中去掉最后一个目录名有一个模糊的想法,但我真的很想知道是否有可能使用PHP以我描述的方式转换字符串。

您可以使用该函数获取“this_dir”部分,因此只需执行以下操作:

$directoryName = ucwords(str_replace('_', ' ', basename($_SERVER['REQUEST_URI'])));
编辑 对于“/main/this_dir/something.php”这样的页面来说,这是一个稍微复杂一些的示例:

这只是在传递到
basename
之前剥离最后一个“/”后面的任何内容,以确保它能像以前一样工作。请注意,对于没有尾随“/”的URL,这将不起作用,例如“/main/This_dir”-在这种情况下,它将输出“main”

这将为您提供路径中的最后一个目录

然后你可以做:

$dirParts = explode("_", $directory);
$dirName = implode(" ", array_map("ucfirst", $dirParts));
以用户友好的格式获取目录名


编辑:事实上,正如RobMaster所说,
ucwords(str_replace(““,”,$directory))可能更容易实现

如果你有字符串,使用字符串函数,如
strpos
substr
使事情正常运行:)Rob,你是个大师:)非常感谢你,我花了整整一天的时间才学会使用Google!它工作得很好,比我想象的要简单得多,我本可以算出基本名称,但我做到了甚至不知道ucwords的存在!谢谢!!啊,等等,它不是那么完美:)如果我去
/main/this_dir/
,它会按照我想要的方式翻译。但是我所有的页面都像
/main/this_dir/index.php
一样链接,这会给出一个“index.php”的输出“你好!谢谢你的回答。这似乎是一个可用的解决方案,而且确实能按预期工作。然而,与@RobMasters的解决方案相比,这种方法会不会更占用资源?这将运行在我的网站基本上每一页,以产生部分的网页标题,所以我想最快的解决方案。我所做的是将您的两个答案结合在一起,形成这样一个答案:
$directoryName=ucwords(str_replace(“”),“”,end(explode(“/”,dirname($_SERVER['REQUEST_URI']))
这难道不是最节省资源的方法吗?是的-当我意识到@RobMasters打印用户友好目录名的方法比我的更好时,我编辑了我的文章。就资源使用而言,我真的不会为这么一个小小的声明而担心。只有在处理大型记录集或大型循环时,才应该担心这一点。在这种情况下,代码可读性可能更重要。非常有用的信息,非常感谢您的输入!如果我能选择两个答案,我会:)
$path = explode("/", dirname($_SERVER['REQUEST_URI']));
$directory = end($path);
$dirParts = explode("_", $directory);
$dirName = implode(" ", array_map("ucfirst", $dirParts));