【问题标题】:Remove all characters after a specific character [duplicate]删除特定字符之后的所有字符[重复]
【发布时间】:2012-03-08 02:54:33
【问题描述】:

谁能告诉我如何在 php.ini 中删除 ? 之后的字符。我有一个字符串test?q=new,我需要将? 中的字符删除到字符串的末尾。

【问题讨论】:

  • 你在哪里看到这个? test?=new
  • 抱歉略有差异测试?q=new

标签: php substring truncate


【解决方案1】:

最短的一个:

echo strtok('test?=new', '?');

如果要保留问号,解决方法几乎一样:

echo strtok('test?=new', '?').'?';

【讨论】:

  • 这是剥离问号。 OP 表示 ? 之后的所有字符
【解决方案2】:

您也可以随时尝试使用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("/(?&lt;=\?).+/", "", $string);,我认为这样的意图更清楚。
  • 好点。在常规脚本中,这会更有意义;只是为了这个例子,为了简单起见,我保持两个表达式相同。但我想? 通常不会被保存...
【解决方案3】:

为什么不:

$pos = strpos($str, '?'); // ? position
$str = substr($str, 0, $pos);

【讨论】:

    【解决方案4】:

    您可以使用编写良好的正则表达式来做到这一点,但更简单、更快捷的方法是分解“?”上的字符串。字符,并使用结果数组中的第一个元素。

    $str = "test?=new";
    $str2 = explode("?", $str);
    $use_this = $str2[0];
    

    $use_this[0] 将是“测试”。如果要添加“?”返回,只需连接:

    $use_this = $use_this."?";
    

    【讨论】:

      【解决方案5】:

      这里是单行:

      $s = strpos($s, '?') !== FALSE ? strtok($s, '?') : $s;
      

      您可以通过以下命令行对其进行测试:

      php -r '$s = "123?456"; $s = strpos($s, "?") !== FALSE ? strtok($s, "?") : $s; echo $s;'
      

      【讨论】:

        【解决方案6】:

        substrstrpos

        最简单的方法是使用substr() DOCsstrpos() 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() 返回它正在搜索的字符的第一个实例的索引(在本例中为 ?)。

        【讨论】:

          【解决方案7】:

          使用strstr 函数。

          <?php
          $myString = "test?=new";
          $result = strstr($myString, '=', true);
          
          echo $result ;
          

          第三个参数true 告诉函数返回第二个参数第一次出现之前的所有内容。

          【讨论】:

            猜你喜欢
            • 2016-08-09
            • 1970-01-01
            • 1970-01-01
            • 2010-10-28
            • 2016-08-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多