2016-02-18 2 views
0

Хорошо, я думаю, причина, по которой строка поиска на этой странице не работает, связана с тем, что обновленный PHP и preg_replace устарел. https://sparklewash.com/Использование функции Preg_Replace_Callback

Я попытался заменить функцию preg_replace на preg_replace_callback так, но у меня все еще возникают проблемы.

Оригинал:

function clean($string) { 
    $string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens. 
    return preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars. 

} 

Новая версия:

function clean($string) { 
    $string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens. 
    return preg_replace_callback('/(^|_)([a-z])/', 
    create_function ('$matches', 'return strtoupper($matches[2]);'), $string); // Removes special chars. 
} 

Я прошу прощения, если это легко для вас, я пытался следовать статью здесь, но я до сих пор относительно новый для PHP.

Редактировать: Я верю, что preg_replace не то, что сломало его из-за некоторых комментариев. Я задал новый вопрос, чтобы остановиться на теме: Redirect Loop on $_GET Request

+2

'preg_replace' не устарел, а' e' был изменен. Что вы использовали? Включите предыдущее сообщение об ошибке и код. – chris85

+0

Какую версию PHP вы используете? Если вы используете 5.3.0 или новее, вы должны использовать анонимную функцию вместо 'create_function()'. – Barmar

+0

Я не понимаю вопроса. Исходный код не использовал 'strtoupper', зачем это нужно в обновлении? – Barmar

ответ

0

Я бы не рекомендовал синтаксис, который вы используете, наиболее вероятную причину ошибки, любезно попробуйте синтаксис ниже.

$result = preg_replace_callback('/(^|_)([a-z])/', function($matches){ 

    return strtoupper($matches[0]); 
    /* 
    $matches[0] is the complete match of your regular expression 
    $matches[1] is the match of the 1st round brackets() similarly for $matches[2]...and so on. 

    */ 

}, $string); 

//Also $result will contain the resultant string 

Вы должны просто передать $ соответствуют вашей функции обратного вызова, вы можете также объявить функцию обратный вызов отдельно, как самостоятельные функции.

function make_upper($matches){ 

    return strtoupper($matches[0]); 

} 
$result = preg_replace_callback('/(^|_)([a-z])/','make_upper' , $string); 

Надеюсь, что мое решение работает для вас, спасибо. :)

Смежные вопросы