【发布时间】:2012-03-08 02:54:33
【问题描述】:
谁能告诉我如何在 php.ini 中删除 ? 之后的字符。我有一个字符串test?q=new,我需要将? 中的字符删除到字符串的末尾。
【问题讨论】:
-
你在哪里看到这个?
test?=new -
抱歉略有差异测试?q=new
谁能告诉我如何在 php.ini 中删除 ? 之后的字符。我有一个字符串test?q=new,我需要将? 中的字符删除到字符串的末尾。
【问题讨论】:
test?=new
最短的一个:
echo strtok('test?=new', '?');
如果要保留问号,解决方法几乎一样:
echo strtok('test?=new', '?').'?';
【讨论】:
? 之后的所有字符
您也可以随时尝试使用preg_replace():
$string = 'test?q=new';
$result = preg_replace("/\?.+/", "", $string);
如果出于某种原因,您希望在结果中保留?...您也可以这样做:
$string = 'test?q=new';
$result = preg_replace("/\?.+/", "?", $string);
(或者,您可以使用积极的后视断言,正如@BlueJ774 所建议的那样),如下所示:
$result = preg_replace("/(?<=\?).+/", "", $string);
但理想情况下,为了将来参考,如果您正在使用 查询字符串,您可能会希望在某些时候使用parse_str /em>,像这样:
$string = 'test?q=new';
parse_str($string, $output);
因为这将为您提供一个数组(在本例中为$output),用于处理查询字符串的所有部分,如下所示:
Array
(
[test?q] => new
)
但通常...此时您可能只想使用查询字符串...所以输出会更像这样:
Array
(
[q] => new
)
【讨论】:
preg_replace(保留?)也可以表示为$result = preg_replace("/(?<=\?).+/", "", $string);,我认为这样的意图更清楚。
? 通常不会被保存...
为什么不:
$pos = strpos($str, '?'); // ? position
$str = substr($str, 0, $pos);
【讨论】:
您可以使用编写良好的正则表达式来做到这一点,但更简单、更快捷的方法是分解“?”上的字符串。字符,并使用结果数组中的第一个元素。
$str = "test?=new";
$str2 = explode("?", $str);
$use_this = $str2[0];
$use_this[0] 将是“测试”。如果要添加“?”返回,只需连接:
$use_this = $use_this."?";
【讨论】:
这里是单行:
$s = strpos($s, '?') !== FALSE ? strtok($s, '?') : $s;
您可以通过以下命令行对其进行测试:
php -r '$s = "123?456"; $s = strpos($s, "?") !== FALSE ? strtok($s, "?") : $s; echo $s;'
【讨论】:
substr 和 strpos
最简单的方法是使用substr() DOCs 和strpos() DOCs。
$string = 'test?=new';
$cut_position = strpos($string, '?') + 1; // remove the +1 if you don't want the ? included
$string = substr($string, 0, $cut_position);
如您所见,substr() 按索引从字符串中提取子字符串,strpos() 返回它正在搜索的字符的第一个实例的索引(在本例中为 ?)。
【讨论】:
使用strstr 函数。
<?php
$myString = "test?=new";
$result = strstr($myString, '=', true);
echo $result ;
第三个参数true 告诉函数返回第二个参数第一次出现之前的所有内容。
【讨论】: