我再次寻求你的帮助,我遇到一个小问题,解决方案可能很明显/看着我,但我还没有解决我的问题。
我需要修剪一个碰巧有变量的字符串。 (该字符串实际上是一个URL)
示例字符串/网址:
/portal/index.php?module=SerialDB&page=listing&returnmsg=3
& returnmsg = 3可以是0到100之间的数字范围,在某些情况下也可以是文本。这是我需要修改的变量,因为我希望将其余的字符串/ URL存储到数据库中。以下是我寻求的结果;
/portal/index.php?module=SerialDB&page=listing
我已经尝试了以下代码,看它是否适合我需要的功能,但不幸的是它更具体,除非得到完全匹配否则不会修剪。
$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
如果有人愿意协助我,我将非常感激。和我的所有问题一样,我也想了解发生了什么,而不是仅仅交付代码,以便将来可以自信地使用它。
再次感谢你们:)
答案 0 :(得分:2)
一种不依赖于参数顺序的快速方法只是拆分碎片,挑选出你想要的东西,然后再将它们重新组合在一起(你可以查看各种PHP函数以获取更多细节):< / p>
$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);
答案 1 :(得分:2)
简单。这个概念称为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()
函数返回字符串的一部分。它需要三个参数。参数#1是您要从中提取的字符串,参数#2是您要从哪里开始,参数#3是切片的长度或要提取的字符数。
strrpos()
函数返回字符串中最后一次出现的子字符串的位置/索引。示例:如果您有字符串&#34; zazz&#34;将返回最后一个z的位置。您可以将其视为&#34;字符串反向位置&#34;。此函数接受三个参数。我将只覆盖两个,因为这是我在这个例子中使用的数字。参数#1是您要搜索的字符串,参数#2是针或您要查找的内容,在您的情况下是&
。正如我在本段开头所提到的,它以整数的形式返回位置。在你的情况下,这个数字是46。
因此strrpos()
作为substr()
中的第三个参数告诉它切割字符串的位置。完成后,它将返回您要提取的段。
如果您阅读PHP手册并查看可能在将来帮助您的可用功能,将会很有帮助。您可以通过各种方式组合这些功能来解决您的问题。
答案 2 :(得分:1)
如果returnmsg
始终是您网址中的最后一个参数(而不是第一个参数),并且您的网址没有包含锚点,那么简而言之,参数总是在最后,您可以解决一个简单的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
~
(对于这两种方式,如果参数不存在,则网址保持不变。)
答案 3 :(得分:1)
我不会开始或结束它的天气,所以如果它结束,那么使用下面的代码。
<?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, "&");
以上代码正在爆炸阵列&amp;然后运行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);
希望这有助于你