





$str = preg_replace('/\?//', '?', $str);
Обновлено: см. Ответ CMS. Уже поздно, мне лучше знать.
str_replace ослепительно быстрее, чем регулярное выражение.
@Pestilence, поэтому я рекомендовал ответ CMS.
Хотя здесь вполне подойдет регулярное выражение, я представлю вам альтернативный метод. мощь будет немного быстрее, чем эквивалентное регулярное выражение, но вся жизнь - это выбор (... или что-то в этом роде).
$length = strlen($urlString);
for ($i=0; $i<$length; i++) {
if ($urlString[$i] === '?') {
$urlString[$i+1] = '';
break;
}
}
Странно, я знаю.
Эээ, а что, если $ urlString [$ i + 1] не является /?
Отсутствие век: проблема не связана с этим случаем, поэтому и в моем решении это не учитывалось. MDCore: поясните, почему так?
Я столкнулся с проблемой, когда это полезно. Если ваша строка имеет размер порядка мегабайт (это может случиться), запуск preg_replace или str_replace может привести к поражению вашего php.ini memory_limit. Код pcre_replace в php всегда уменьшает размер строки в 2 раза, прежде чем что-либо делать, поэтому это может быть проблемой.
Исходя из моего предыдущего комментария, если ваша строка действительно огромна, вы можете использовать некоторые трюки strpos, чтобы найти нужные части, preg_match их, а затем использовать указанную выше нотацию скобок, чтобы исключить символы, которые вам не нужны. Используйте с осторожностью, так как это не быстро, но позволит сэкономить память.
Я думаю, что лучше использовать просто str_replace, как сказано в инструкции:
If you don't need fancy replacing rules (like regular expressions), you should always use this function instead of ereg_replace() or preg_replace().
<?
$badUrl = "http://www.site.com/backend.php?/c=crud&m=index&t=care";
$goodUrl = str_replace('?/', '?', $badUrl);
$splitPos = strpos($url, "?/");
if ($splitPos !== false) {
$url = substr($url, 0, $splitPos) . "?" . substr($url, $splitPos + 2);
}
Вы должны действительно отметить ответ CMS как правильный.