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 手册并查看将来可能对您有帮助的可用功能,将会很有帮助。您可以通过多种方式组合这些功能来解决您的问题。
我遇到了一个小问题,再次寻求您的帮助,解决方案可能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 手册并查看将来可能对您有帮助的可用功能,将会很有帮助。您可以通过多种方式组合这些功能来解决您的问题。