【问题标题】:Php trim string at a particular characterphp 在特定字符处修剪字符串
【发布时间】:2009-12-02 06:22:02
【问题描述】:

是否有一个 php 字符串函数可以在特定字符之后修剪字符串。我查看了 php.net 网站并进行了谷歌搜索,但找不到任何东西。我能想到的唯一解决方案是爆炸,然后抓取数组的第一部分,但这不是最优雅的解决方案。

例如

$string = "/gallery/image?a=b";
$string = imaginary_function($string,'?');
echo $string; //echoes "/gallery/image"

有谁知道一个好的 php 字符串操作函数备忘单? 谢谢

【问题讨论】:

标签: php string


【解决方案1】:

可能是这样的:

$string = substr($string, 0, strpos($string, '?'));

请注意,这不是很可靠(即没有错误检查等),但它可能会帮助您解决问题。

【讨论】:

  • 有趣,我只是想出了相同的解决方案,似乎有很多不同的方法来解决这个简单的问题
  • PHP 松散地从 Perl 派生出来并不奇怪 ;) en.wikipedia.org/wiki/There%27s_more_than_one_way_to_do_it
  • 但是如果 '?' 这将失败在字符串中找不到,即它会导致一个空字符串。
  • 不确定,但我猜两个函数调用(substrstrpos)比strstrstrtok 等单个调用占用更多资源。当然,如果它只在每个页面加载时运行一次,谁在乎 :)
  • 是否可以重复尝试uk3.php.net/manual/en/function.strrpos.php
【解决方案2】:

虽然纯字符串函数可能会提供更好的性能,但这不仅仅是一个字符串;这是一个URI。因此,使用处理此类数据的函数更有意义:

echo parse_url("/gallery/image?a=b", PHP_URL_PATH);
// Output: /gallery/image

【讨论】:

    【解决方案3】:

    你可以使用explode:

    $string = "/gallery/image?a=b";
    list($url,$querystring) = explode('?', $string, 2);
    

    【讨论】:

    • 很有用,因为现在我有一个变量中的查询字符串,所以我可以在以后需要时使用它。我只想最小化我的代码。
    【解决方案4】:

    试试strtok:

    $token = strtok($str, '?');
    

    请注意,第二个参数是分隔符列表,而不是分隔符字符串。

    【讨论】:

      【解决方案5】:

      strstrstristr 函数查找字符串中的第一个匹配项并返回其后的所有内容(包括搜索字符串)。但如果您提供true 作为第三个参数,它会将搜索字符串前面的所有内容带回。

      $string = strstr( $string, '?', true); # Returns /gallery/image
      

      如果未找到匹配项,则返回 FALSE,因此您可以编写如下错误检查:

      if( $path = strstr( $string, '?', true) ){
         # Do something
      }
      

      【讨论】:

      • 小心stristr:“返回匹配的子字符串。如果没有找到needle,返回FALSE。”
      • 你不需要stristrstrstr 就足够了。
      • 感谢@Dominic 和@Gumbo。更新了我的答案以反映您的两个 cmets。
      【解决方案6】:
      function imaginary_function($string, $char) {
        $index = strpos($char, $needle);
        if ($index === false) { return $string };
      
        return substr($string, 0, $index);
      }
      

      here 提供了一个优秀的官方字符串操作函数列表。

      【讨论】:

        【解决方案7】:

        这对于你想要做的事情来说可能有点过头了,但是如果你想把一个 URL 分成几块,试试 PHP 函数parse_url。这是PHP manual page

        然后你会想要结果数组的“路径”部分。

        【讨论】:

          猜你喜欢
          • 2013-01-14
          • 1970-01-01
          • 1970-01-01
          • 2014-11-27
          • 2015-07-25
          • 2018-11-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多