【问题标题】:PHP removing a character in a stringPHP删除字符串中的一个字符
【发布时间】:2008-11-05 06:34:40
【问题描述】:

我的 php 很弱,我正在尝试更改此字符串:

http://www.example.com/backend.php?/c=crud&m=index&t=care
                                   ^

成为:

http://www.example.com/backend.php?c=crud&m=index&t=care
                                  ^

删除backend.php? 之后的/。有任何关于最佳方式的想法吗?

谢谢!

【问题讨论】:

  • 您实际上应该将 CMS 的答案标记为正确答案。

标签: php string


【解决方案1】:

我认为最好直接使用str_replace,就像手册说的那样:

如果您不需要花哨的替换 规则(如正则表达式),你 应始终使用此功能 而不是 ereg_replace() 或 preg_replace().

<?
$badUrl = "http://www.site.com/backend.php?/c=crud&m=index&t=care";
$goodUrl = str_replace('?/', '?', $badUrl);

【讨论】:

    【解决方案2】:
    $str = preg_replace('/\?\//', '?', $str);
    

    编辑:参见 CMS 的回答。来晚了,我应该知道的更好。

    【讨论】:

    • str_replace 比正则表达式快得惊人。
    • @Pestilence,这就是我推荐 CMS 的答案的原因。
    【解决方案3】:

    虽然正则表达式很适合这里,但我会向您介绍另一种方法。它可能比等效的正则表达式快一点,但生活就是选择(......或其他东西)。

    $length = strlen($urlString);
    for ($i=0; $i<$length; i++) {
      if ($urlString[$i] === '?') {
        $urlString[$i+1] = '';
        break;
      }
    }
    

    很奇怪,我知道。

    【讨论】:

    • 呃,如果 $urlString[$i+1] 不是 / 怎么办?
    • eyelidlessness:问题没有出现这种情况,所以我的解决方案也没有考虑到它。 MDCore:请详细说明,为什么会这样?
    • 我遇到了一个有用的问题。如果您的字符串大小约为 megs(可能发生),则运行 preg_replace 或 str_replace 将有可能达到 php.ini 的 memory_limit。 php 中的 pcre_replace 代码在执行任何操作之前总是会 malloc 2 倍的字符串大小,所以这可能是个问题。
    • 从我之前的评论开始,如果你的字符串真的很大,你可以做一些 strpos 技巧来找到正确的部分,preg_match 它们,然后使用上面的括号表示法来消除你没有的字符'不想要。小心使用,因为它不快,但会节省内存。
    【解决方案4】:
    $splitPos = strpos($url, "?/");
    if ($splitPos !== false) {
        $url = substr($url, 0, $splitPos) . "?" . substr($url, $splitPos + 2);
    }
    

    【讨论】:

      猜你喜欢
      • 2018-12-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2011-06-24
      • 2016-06-24
      • 1970-01-01
      相关资源
      最近更新 更多