2016-04-14 2 views
-2

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

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

Вы заметите, что первый пытается найти скрипт и iframe, а затем обернуть div вокруг этого.

Второй, просто пытается заменить URL-адреса «//» протоколом HTTP - я понимаю, что это можно сделать как str_replace, о котором я прокомментировал ниже. Я тестировал, что str_replace работал над тем, чтобы не было забавного дела с этой функцией, которая не вызывалась, и она работала нормально. По какой-то причине preg_replace в основном игнорируется, и строка не изменяется.

Я пропустил что-то очевидное здесь?

Я пробовал пару инструментов preg_replace в Интернете, и они выглядят правильно.

function cleanseSpringboardEmbed($content) 
{ 
    // run regex over the content to clean up the embed code from springboard and make compatible with IA. 
    $patternWrapper = '/<script src="\/\/www.springboardplatform\.com\/js\/overlay"><\/script><iframe(.*)<\/iframe>/'; 

    $patternProtocol = '/<iframe src="\/\/cms.springboardplatform.com/'; 

    $holder = $content; 

    $replacementWrapper = '<figure class="op-interactive">' . '$0' . '</figure>'; 
    $replacementProtocol = '<iframe src="http://cms.springboardplatform.com'; 

    //$holder = str_replace("//cms.springboardplatform.com","http://cms.springboardplatform.com", $holder); 
    //$holder = str_replace("//www.springboardplatform.com","http://www.springboardplatform.com", $holder); 

    preg_replace($patternWrapper, $replacementWrapper, $holder); 
    preg_replace($patternProtocol, $replacementProtocol, $holder); 
    return $holder; 
} 

Вот пример некоторых входных

<p>test<br /> 
<script src="//www.springboardplatform.com/js/overlay"></script><iframe id="crzy003_1621795" src="//cms.springboardplatform.com/embed_iframe/5365/video/1621795/crzy003/craziestsportsfights.com/10" width="600" height="400" frameborder="0" scrolling="no"></iframe><br /> 
test</p> 

ответ

1

Вы забыли назначить измененное значение держателя после выполнения preg_replace. Согласно выше странице руководства

preg_replace() возвращает массив, если параметр субъекта является массивом, или строка в противном случае.

Если совпадения не найдены, новый объект будет возвращен, иначе субъект будет возвращен без изменений или NULL, если произошла ошибка.

Таким образом, вы должны изменить свой код следующим образом:

<?php 

function cleanseSpringboardEmbed($content) 
{ 
    // run regex over the content to clean up the embed code from springboard and make compatible with IA. 
    $patternWrapper = '/<script src="\/\/www.springboardplatform\.com\/js\/overlay"><\/script><iframe(.*)<\/iframe>/'; 

    $patternProtocol = '/<iframe src="\/\/cms.springboardplatform.com/'; 

    $holder = $content; 

    $replacementWrapper = '<figure class="op-interactive">' . '$0' . '</figure>'; 
    $replacementProtocol = '<iframe src="http://cms.springboardplatform.com'; 

    //$holder = str_replace("//cms.springboardplatform.com","http://cms.springboardplatform.com", $holder); 
    //$holder = str_replace("//www.springboardplatform.com","http://www.springboardplatform.com", $holder); 

    $holder = preg_replace($patternWrapper, $replacementWrapper, $holder); 
    $holder = preg_replace($patternProtocol, $replacementProtocol, $holder); 
    return $holder; 
} 
+1

спасибо так много! –

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