PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
fullzero
Отправлено: 22 Января, 2017 - 18:50:34
Post Id



Гость


Покинул форум
Сообщений всего: 120
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




Всем привет. Подскажите пожалуйста, как произвести замену значений в тегах? У меня есть массив оригинальных строк и уже переведенных, саму замену произвожу в файле. Пробовал через str_replace но он меняет все найденные совпадения, получается нечто: <ТекстBlock ТекстWrapping="Wrap">Цвет</ТекстBlock> )))

Оригинальные значения искал через preg_match_all, после сохранял в базу и делал перевод
PHP:
скопировать код в буфер обмена
  1. preg_match_all('/<TextBlock(.*?)>(.*?)<\/TextBlock>/', $file, $TextBlock);
  2. preg_match_all('/<Label(.*?)="(.*?)"(.*?)\/>/', $file, $Label);


пример файла
CODE (htmlphp):
скопировать код в буфер обмена
  1. <TextBlock TextWrapping="Wrap">Color</TextBlock>
  2. <TextBlock>Greed</TextBlock>
  3. <Label>Text</Label>
  4. и прочие поля


Попытка произвести замену Ха-ха
PHP:
скопировать код в буфер обмена
  1. $query = "SELECT `en`,`ru` FROM `#__translate` WHERE ru!=\"\"";
  2. $db->setQuery($query);
  3. $row = $db->loadObjectList();
  4.  
  5. for($i=0;$i<=count($row);$i++) {
  6. $patterns = array();
  7. $patterns[0] = '/<GroupBox Header="'.$row[$i]->en.'"(.*?)>/';
  8. $patterns[1] = '/<Label(.*?)="'.$row[$i]->en.'"(.*?)\/>/';
  9. $patterns[2] = '/<TextBlock(.*?)>'.$row[$i]->en.'<\/TextBlock>/';
  10.  
  11. $replacements = array();
  12. $replacements[0] = '/<GroupBox Header="'.$row[$i]->ru.'"(.*?)>/';
  13. $replacements[1] = '/<Label(.*?)="'.$row[$i]->ru.'"(.*?)\/>/';
  14. $replacements[2] = '/<TextBlock(.*?)>'.$row[$i]->ru.'<\/TextBlock>/';
  15.  
  16. $result = preg_replace($patterns, $replacements, $file);
  17. }


Как я понял, я намудрил с шаблонами... Кто подскажет или объяснит как поправить дело?
 
 Top
Строитель
Отправлено: 22 Января, 2017 - 19:19:47
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 737
Дата рег-ции: Февр. 2014  


Помог: 19 раз(а)




fullzero, если я вас правильно понял
PHP:
скопировать код в буфер обмена
  1. $str = '<TextBlock TextWrapping="Wrap">Color</TextBlock>';
  2. $patt = '~(<TextBlock[^>]*>).*?(</TextBlock>)~iu';
  3.  
  4. echo preg_replace($patt, '$1Цвет$2', $str);
  5. // Исходный код будет такой:
  6. // <TextBlock TextWrapping="Wrap">Цвет</TextBlock>
 
 Top
fullzero
Отправлено: 22 Января, 2017 - 19:34:34
Post Id



Гость


Покинул форум
Сообщений всего: 120
Дата рег-ции: Март 2011  


Помог: 0 раз(а)




Строитель пишет:
fullzero, если я вас правильно понял
PHP:
скопировать код в буфер обмена
  1. $str = '<TextBlock TextWrapping="Wrap">Color</TextBlock>';
  2. $patt = '~(<TextBlock[^>]*>).*?(</TextBlock>)~iu';
  3.  
  4. echo preg_replace($patt, '$1Цвет$2', $str);
  5. // Исходный код будет такой:
  6. // <TextBlock TextWrapping="Wrap">Цвет</TextBlock>


Не совсем то, у меня есть таблица, в ней есть все оригинальные поля (Color, Text, и так далее) и перевод полей на русский язык, вот мне надо заменить оригинальный текст в тегах на мой переведенный
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB