2013-03-13 13 views
0

Я использую API-интерфейс Google API. Я отправляю html строку. Перевод отлично работает, но теги перепутались.Удалить места из тегов HTML

Например:

<b>Hello World</b> 

становится

<b>Hello World</ b> 

Иногда теги возвращаются как:

<b>Hello World</b > 

Мои усилия в PHP (который не работает)

preg_replace('~<(\s*)/(.*)(\s*)>~is', '</$2>', $string); 
+0

Зачем вам все это? Это допустимый HTML. –

+0

@MadaraUchiha, no '' недействителен. – Qtax

+0

@ MadaraUchiha? –

ответ

1

Вы могли бы использовать:

$string = preg_replace(',<\s*/\s*(\w+)\s*>,s', '</$1>', $string); 
+0

Это работает! Большое спасибо! –

+0

@FlipBooth, пожалуйста. И здесь, в SO, вы можете поблагодарить с помощью кнопок голосования. ;-) – Qtax

+0

еще несколько минут, прежде чем я смогу принять ответ :) –

0

Try:

preg_replace('/<\s*\/\s*([^\s]*?)\s*>/', '</\\1>', $string); 

Живая демонстрация: http://regexr.com?3444s

+0

Не работает. Ответ @Qtax работал. –

+0

@FlipBooth, ты видишь, я немного его отредактировал? –

1

Имейте в виду, регулярное выражение будет решить эту проблему точно. Но только защищает от пробелов в тегах. Не защитит вас от дальнейших проблем HTML.

Это будет работать только до сих пор, но вы можете попробовать парсер HTML, например Simple HTML DOM, который имеет некоторую обработку недействительного HTML. Затем вы можете очистить HTML из библиотеки.

+0

+1 за то, что не использовал preg –

+0

Я даже попробовал аккуратный (чистый) .. не работал –

+0

Просто хочу, чтобы вы знали, что Google может изменить свой ответ API на в любое время делая ваше «исправление» бесполезным. Вы не исправляете проблему с помощью решения regex. –

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