2015-01-26 2 views
1

данные: <product name_here>Product A</product_name here>Заменить пробелы с подчеркиванием только в теге

Я стараюсь это $replace = preg_replace('/\s+/', '_', $replace);

но показывают неправильно, как это: <product_name_here>Product_A</product_name_here>

Просто только заменить пространство с подчеркиванием только внутри имени тега, нет необходимости изменить пространство в значении

Я хочу так: <product_name_here>Product A</product_name_here>

Пожалуйста, помогите.

+0

... на самом деле, вы пытаетесь очистить XML-канал Duff? Это может быть сложно с 'regexps', поскольку на этих узлах могут быть атрибуты; например ' ...' – CD001

+0

@ CD001: не могли бы вы показать нам, как решить этот конкретный пример, когда открывающий и закрывающий тег То же имя с DOMDocument? –

+0

@CasimiretHippolyte не без лишних разъяснений на вопрос не думаю. Являются ли теги действительно называемыми 'product_name_here' (или их некоторыми вариантами) или они заполняются из базы данных с фактическими названиями продуктов? Возможно ли, чтобы теги имели атрибуты? Честно говоря, я бы посмотрел на то, что генерирует XML в первую очередь, а не пытается «липкую штукатурку» после факта ... а не с DOMDocument (хотя я сначала буду строить файл с ним); Я полностью изменил свой предыдущий комментарий до того, как вы разместили свой номер (после повторного чтения вопроса): P – CD001

ответ

0

Можете ли вы привести лучший пример?

В моем понимании вы хотите:

У вас есть: Продукт А

Вы хотите: Продукт А

Является ли это правильно?

Если это так, все, что вам нужно сделать, это str_replace (»», „_“, $ продукта)

Извините за мой плохой английский.

1

Как насчет?

$before = '<product name_here>Product A</product_name here>'; 
$after = preg_replace('/(<[^>]*)\s+([^<]*>)/', '$1_$2', $before); 
echo $after; 

Это должно дать

<product_name_here>Product A</product_name_here> 

Части, до и после того, как \ с + указать, что вы не хотите пространства за пределами тега спаривания, но только те, которые заключенные между открывающим тегом < и закрывающий тег >. $1 и $2 заменить обратно в строках до и после замененных пробелов.

+1

У меня такое чувство, что это может быть немного специфичным, и что 'product_name_here' является просто заполнителем для хранения XML-фида фактическим продуктом имена как имена тегов ... '', например, не сработает. Я мог бы, конечно, совершенно ошибаться в этом подозрении. – CD001

+0

@ CD001 Вы, вероятно, правы. Но, возможно, '' является желаемым результатом. Тогда это сработает. Он не будет работать с такими атрибутами, как вы заявляли ранее. – Daniel82

+0

Спасибо Daniel82 это работа для меня, но у меня другая проблема я нашел какое-то значение имеет пробелы как это P Roduct А или Pro канал А Как я могу это исправить, чтобы продукт A Спасибо – droidstack

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