Как добавить циклы в несложный код

bork75

The Team
Регистрация
21 Июн 2008
Сообщения
1.455
Реакции
734
Нахожу в искомом тексте слова в скобках и перевожу их в urlencode.
Код рабочий сделал, но в тексте будет много искомых [[слов]],
нужно как-то циклом учесть все переменные.
в последнем, где $replacements[0] порядок перекручен

Начальный текст: текст [[слово1]] текст [[слово2]] текст [[слово3]] и тд....
Текст на выходе: текст %F1%EB%EE%E2%EE1 текст %F1%EB%EE%E2%EE2 текст %F1%EB%EE%E2%EE3

PHP:
<?php
$string = "текст [[слово1]] текст [[слово2]] текст  [[слово3]]";

// Находим слова с скобках [[ ]]
$pattern = "/\[\[(.*?)\]\]/i";

preg_match_all ($pattern, $string, $slovo, PREG_PATTERN_ORDER);

$text0 = $slovo[1][0];
$text1 = $slovo[1][1];
$text2 = $slovo[1][2];

// Учитываем слово со скобками для str_replace
$patterns[0] = "[[".$text0."]]";
$patterns[1] = "[[".$text1."]]";
$patterns[2] = "[[".$text2."]]";

// Перводим найденные слова в urlencode

$replacements[2] = urlencode($text0); //! 2
$replacements[1] = urlencode($text1); //! 1
$replacements[0] = urlencode($text2); //! 0


// Делаем замену найденных слов на слова в urlencode
echo str_replace($patterns, $replacements, $string);
?>
 
немного кривое решение, есть замечательная функция, Для просмотра ссылки Войди или Зарегистрируйся, пройдись через foreach по массиву полученному после регулярки, забей массив слово => преобразованное слово и скорми это дело функции.
 
Используй функцию preg_replace или (если более сложные преобразования) preg_replace_callback
 
немного кривое решение, есть замечательная функция, Для просмотра ссылки Войди или Зарегистрируйся, пройдись через foreach по массиву полученному после регулярки, забей массив слово => преобразованное слово и скорми это дело функции.
Функция интересная, но прикрутить её не получилось.
Если не сложно, покажи на моём примере.
 
Функция интересная, но прикрутить её не получилось.
Если не сложно, покажи на моём примере.
Для cp1251:
Код:
<?php

$q = 'текст [[слово1]] текст [[слово2]] текст [[слово3]]';
$m = preg_replace_callback('#\[\[(.*)\]\]#iU','urlencode_0',$q);
echo $q,'<br>',$m,'<br>',$q;
function urlencode_0($matches) {
    print_r ($matches);
    return urlencode($matches[0]);
}
Если будет utf-8 - в регулярку добавить u:
Код:
'#\[\[(.*)\]\]#iuU'
 
Для cp1251:
Код:
<?php

$q = 'текст [[слово1]] текст [[слово2]] текст [[слово3]]';
$m = preg_replace_callback('#\[\[(.*)\]\]#iU','urlencode_0',$q);
echo $q,'<br>',$m,'<br>',$q;
function urlencode_0($matches) {
    print_r ($matches);
    return urlencode($matches[0]);
}
Если будет utf-8 - в регулярку добавить u:
Код:
'#\[\[(.*)\]\]#iuU'

Отлично, это то, что нужно! )
Только на выходе кодировка не та, хотя по коду всё правильно

слово1 должно быть на выходе %F1%EB%EE%E2%EE1
Сейчас так %5B%5B%F1%EB%EE%E2%EE1%5D%5D

iuU попробовал
 
Назад
Сверху