【问题标题】:PHP extracting text from a URLPHP 从 URL 中提取文本
【发布时间】:2012-06-29 23:11:05
【问题描述】:

我有一个类似这样的网址...

http://www.mydomain.co.uk/this-is-the-text-i-would-like-please.php

我想去掉 / 之后但 .php 之前的文本,并想删除 - 的

所以结果是

这是我想要的文字

想法是然后将其用作标题标签

我已经尝试过 substr、strrchr,但就是不知道如何得到我需要的东西。

任何帮助将不胜感激

非常感谢

【问题讨论】:

  • 请在问题中说明您的所有要求,而不是在 cmets 中滴灌。谢谢。

标签: php regex query-string


【解决方案1】:

你可以使用basename()

$fname = basename('http://www.mydomain.co.uk/this-is-the-text-i-would-like-please.php');
$fname = str_replace('-', ' ', $fname);

编辑:

<?php
   $fname = basename('http://www.mydomain.co.uk/this-is-the-text-i-would-like-please.php');
   $fname = str_replace('-', ' ', $fname);
   $fname = substr($fname, 0, -4);
   echo $fname;
?>

结果:

this is the text i would like please

参考LIVE DEMO

【讨论】:

  • 这将保留.php 扩展名。
  • 好问题。我也一样。 OP 在我的帖子上说“完美”,结果为-1。去图吧。
【解决方案2】:

您可以对strrpos()substr() 使用简单的字符串操作,如下所示:

$str = 'http://www.mydomain.co.uk/this-is-the-text-i-would-like-please.php';
echo substr( $str, strrpos( $str, '/') + 1, -4);

这个will output

this-is-the-text-i-would-like-please

然后,我们用空格替换破折号,使用str_replace(),如下所示:

$str = str_replace( '-', ' ', $str);

To yield:

this is the text i would like please

替代方法是使用parse_url(),然后替换破折号,如下所示:

$str = parse_url( $str, PHP_URL_PATH);
$str = substr( $str, 1, -4); // strip off leading slash and .php from the end
$str = str_replace( '-', ' ', $str);

这也将产生所需的输出。

最后,不用字符串操作的最简单方法是使用pathinfo(),如下所示:

$str = 'http://www.mydomain.co.uk/this-is-the-text-i-would-like-please.php';
$str = pathinfo( $str, PATHINFO_FILENAME);
$str = str_replace( '-', ' ', $str);

【讨论】:

  • 谢谢尼克,将此与 sdjuan;s answer 结合使用
【解决方案3】:

您也可以使用 PHP 的 $_SERVER 数组。变量$_SERVER["REQUEST_URI"] 将为您提供服务器名称之后的所有内容。在这种情况下,它将是“/this-is-the-text-i-would-like-please.php”。

之后,您可以运行任何您喜欢的字符串函数。以下是使用explode()substr 的示例:

$noslash = substr($_SERVER['REQUEST_URI'], 1);  
/* $noslash = "this-is-the-text-i-would-like-please.php" (no leading slash)*/  

$parts = explode($noslash, ".");  
/*   
 * $parts[0] = "this-is-the-text-i-would-like-please"  
 * $parts[1] = "php"  
*/  
$title_tag = $parts[0];

为格式化道歉。

【讨论】:

  • 感谢您的回答,但我不确定它是否适用于我的情况。我在.htaccess 中使用重写器。我认为以这种方式获取 URL 不会显示我的 seo 友好 URL,而是显示重写指向的 URL
【解决方案4】:

与 nickb 类似,但也删除了 -:

echo str_replace('-',' ',substr( $str, strrpos( $str, '/') + 1, -4));

哪个会输出

this is the text i would like please

或者如果您不想要 %20,它会是:

 echo str_replace('%20',' ',str_replace('-',' ',substr( $str, strrpos( $str, '/') + 1, -4)));

【讨论】:

  • 根据nickb原答案写的,,,
  • 完美,非常感谢。是否也可以删除 %20 以及 -'s ?
  • 当然,在替换 str_replace('-','',...
  • 对不起,我仍然想要我原来问题中的空格,但是除了替换 - 用空格我还想知道如何用空格替换 %20 。因此,如果我有 this-is-the%20text 它会显示为这是文本。谢谢
  • 您只需对字符串 str_replace('%20',' ',...) 进行额外替换
猜你喜欢
  • 2010-10-28
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
相关资源
最近更新 更多