修剪包含变量的PHP字符串
我再次就我遇到的一个小问题寻求您的帮助,解决方案可能是显而易见的/看着我的脸,但我还没有解决我的问题 我需要修剪一个字符串,这个字符串中碰巧有一个变量。(字符串实际上是一个URL) 示例字符串/URL:修剪包含变量的PHP字符串,php,string,trim,Php,String,Trim,我再次就我遇到的一个小问题寻求您的帮助,解决方案可能是显而易见的/看着我的脸,但我还没有解决我的问题 我需要修剪一个字符串,这个字符串中碰巧有一个变量。(字符串实际上是一个URL) 示例字符串/URL: /portal/index.php?module=SerialDB&page=listing&returnmsg=3 &returnmsg=3可以是从0到100的数字范围,在某些情况下还可以是文本。这是我需要修剪的变量,因为我希望将字符串/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
$str=“/portal/index.php?module=SerialDB&returnmsg=3”;
echo$str。“
”;//测试以查看完整字符串
回音印章($str,&returnmsg=“);//尝试修剪字符串
如果有人能胜任协助的任务,我将不胜感激。和我所有的问题一样,我也想了解正在发生的事情,而不是仅仅被交给代码,这样我就可以自信地在未来使用它
再次感谢各位:)一个不依赖于参数顺序的快速方法就是将各个部分拆开,挑选出您想要的,然后将它们重新组合在一起(您可以查看各种PHP函数以了解更多详细信息):
一种不依赖于参数顺序的快速方法是将各个部分分开,挑选出您想要的,然后将它们重新组合在一起(您可以查看各种PHP函数以了解更多详细信息):
如果
returnmsg
始终是url中的最后一个参数(而不是第一个),并且如果url不包含锚点,那么简言之,该参数始终位于末尾,您可以通过简单的分解来解决问题:
$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保持不变。)如果returnmsg
始终是url中的最后一个参数(而不是第一个),并且如果url不包含锚定,那么简言之,参数始终位于末尾,您可以通过简单的分解
来解决问题:
$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, "&");
我不知道它是开始还是结束,所以如果它是结束,请使用下面的代码
<?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, "&");
简单。这个概念被称为切片
$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()
函数返回字符串中最后一次出现的子字符串的位置/索引。示例:如果您有字符串“zazz”,则将返回最后一个z的位置。您可以将其视为“字符串反向位置”。此函数接受三个参数。我将只介绍两个,因为这是我在本例中使用的数字。参数#1是您正在搜索的字符串,参数#2是指针或您正在查找的内容,在您的示例中是&
。正如我在本段开头提到的,它以整数的形式返回位置。就你而言,这个数字是46
因此strrpos()
作为substr()
中的第三个参数告诉它在哪里切片字符串。完成后,它返回要提取的段
如果您阅读PHP手册并查看将来可能对您有所帮助的可用函数,这将非常有用。您可以通过各种方式组合这些功能来解决问题
简单。这个概念被称为切片
$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()
函数返回字符串中最后一次出现的子字符串的位置/索引。示例:如果您有字符串“zazz”,则将返回最后一个z的位置。您可以将其视为“字符串反向位置”。此函数接受三个参数。我将只介绍两个,因为这是我在本例中使用的数字。参数#1是您正在搜索的字符串,参数#2是指针或您正在查找的内容,在您的示例中是&
。正如我在本段开头提到的,它以整数的形式返回位置。就你而言,这个数字是46
因此strrpos()
作为substr()
中的第三个参数告诉它在哪里切片字符串。完成后,它返回要提取的段
如果您阅读PHP手册并查看将来可能对您有所帮助的可用函数,这将非常有用。您可以通过各种方式组合这些功能来解决问题
preg_replace(&returnmsg=*)为空此参数是否总是最后一个(出现时)?你的url是否包含锚