Trim PHP 包含变量的字符串

Trim PHP String with variable within it

我遇到了一个小问题,再次寻求您的帮助,解决方案可能obvious/looking就在我面前,但我还没有解决我的问题。

我需要 trim 一个恰好有一个变量的字符串。 (字符串实际上是一个URL)

一个例子String/URL:

/portal/index.php?module=SerialDB&page=listing&returnmsg=3

&returnmsg=3 可以是 0 到 100 范围内的数字,在某些情况下也可以是文本。这是我需要 trim 的变量,因为我希望将 string/URL 的其余部分存储到数据库中。以下是我求的结果;

/portal/index.php?module=SerialDB&page=listing

我试过下面的代码只是为了看看它是否适合我需要的功能,但不幸的是它更具体并且不会 trim 除非它得到完全匹配。

$str = "/portal/index.php?module=SerialDB&returnmsg=3";
echo $str . "<br>"; // Test to see full string
echo chop($str,"&returnmsg="); // Attempt to trim the string

如果有人能胜任协助任务,我将不胜感激。对于我所有的问题,我也想了解正在发生的事情,而不是仅仅将代码交给我,以便我将来可以自信地使用它。

再次感谢大家:)

一个不依赖于参数顺序的快速方法就是拆开碎片,挑选出你想要的,然后再把它们重新组合起来(你可以查看各种PHP函数了解更多详情):

$urlParts = parse_url($url);
parse_str($urlParts['query'], $queryParts);
$returnMsg = $queryParts['returnmsg'];
unset($queryParts['returnmsg']);
$urlParts['query'] = http_build_query($queryParts);
$url = http_build_url($urlParts);

如果 returnmsg 始终是 url 中的最后一个参数(而不是第一个),并且如果 url 不包含锚点,那么简而言之,参数是总是在最后,你可以用一个简单的 explode:

来解决问题
$url = explode('&returnmsg=', $url)[0];

(用 &returnmsg= 拆分字符串并保留第一部分)。

否则按照评论中的建议,您可以使用正则表达式替换:

$url = preg_replace('~[?&]returnmsg=[^&#]*~', '', $url);

图案详情:

~            # pattern delimiter
[?&]         # a literal "?" or a literal "&"
returnmsg=
[^&#]*       # any characters except "&" or "#" zero or more times
~

(对于这两种方式,如果参数不存在,url保持不变。)

我不知道它是在开始还是结束时出现,所以如果它在结束时出现,请使用下面的代码。

<?php
    $url="/portal/index.php?module=SerialDB&page=listing&returnmsg=3";
    $array= explode("&",$url);
    $new_url="";
    foreach($array as $p){
    if(strpos($p,"returnmsg")===false){
    $new_url .=$p."&";
    }
    }
    echo rtrim($new_url, "&");

上面的代码分解了数组 &,然后 运行 一个 foreach 循环将它们连接起来。 @Bobdye 的回答也是正确的,但该代码中有一点问题,对我来说不是 运行。使用下面的代码

<?php
     $url="/portal/index.php?module=SerialDB&page=listing&returnmsg=3";
    $urlParts = parse_url($url);
    parse_str($urlParts['query'], $queryParts);
    $returnMsg = $queryParts['returnmsg'];
    unset($queryParts['returnmsg']);
    $urlParts['query'] = http_build_query($queryParts);
    $url = http_build_query($urlParts);
    var_dump($url);

希望对您有所帮助

简单。这个概念被称为 slicing.

$url = "/portal/index.php?module=SerialDB&page=listing&returnmsg=3";

$new_url = substr( $url, 0, strrpos( $url, '&') );

结果是:/portal/index.php?module=SerialDB&page=listing

substr() 函数 returns 字符串的一部分。它需要三个参数。参数 #1 是您要从中提取的字符串,参数 #2 是您要从哪里开始,参数 #3 是切片的长度或要提取的字符数。

strrpos()函数returnsposition/index字符串中子字符串的最后一次出现。示例:如果您有字符串 "zazz",将返回最后一个 z 的位置。您可以将其视为 "string reverse position"。该函数接受三个参数。我将只介绍两个,因为这是我在此示例中使用的数字。参数 #1 是您要搜索的字符串,参数 #2 是针或您要查找的内容,在您的例子中是 &。正如我在本段开头提到的,它 returns 以整数形式表示的位置。在你的例子中,这个数字是 46。

所以 strrpos() 作为 substr() 中的第三个参数告诉它在哪里分割字符串。完成后 returns 您要提取的片段。

如果您阅读 PHP 手册并查看将来可能对您有帮助的可用功能,将会很有帮助。您可以通过多种方式组合这些功能来解决您的问题。

http://php.net/manual/en/funcref.php