TinyMCE не меняет цвет ссылок — Вынести HTML тэги наружу

Когда-нибудь подучу русский, чтобы генерировать нормальные заголовки 🙂

 

Бывают такие ситуации: нужно вынести теги изнутри наружу например в ситуации:

1
<span style="color: red;"><a href="#">Link</a></span>


А ситуация такая возникает в определенных версиях TinyMCE, и возможно даже только в Firefox (судя по описанию бага), когда мы в неправильном порядке пытаемся сделать цветную ссылку
То есть раньше надо было(до исправления бага):
1 Написать слово
2 Раскрасить слово
3 Выделить слово
4 Сделать ссылкой

а если делать

1 Написать слово
2 Выделить слово
3 Сделать ссылку
4 Раскрасить ссылку

то <span> встает за тег <a> и стиль не действует.

Разумно пользоваться способом один, но не всем это понятно, потому надо решать проблему. В новой же версии (к сожалению не знаю, с какой версии баг исправлен, но в 3.4.2 такого бага уже точно нет, а комменты на багтраке о том, что бага нет датируются концом марта 2011) баг исправлен.

Когда мне приходилось решать это, то баг вроде не был пофиксен или же обновлять редактор было трудней, чем применить регулярку ко всему сохраняемому тексту (да, да я плохой и делаю я неправильно) 🙂

Суть

1
2
3
4
5
6
7
8
9
10
11
$value = '<span style="color: red;"><a href="#">Link</a></span>';
 
preg_match('~<span[^>]*>(<a[^>]*>)([^>]*)(</a>)</span>~i', $value, $a);
 
 preg_match('~(<span[^>]*>)<a[^>]*>[^>]*</a>(</span>)~i', $value, $span);
 
$old_link = $a[0];
 
$new_link = $a[1].$span[1].$a[2].$span[2].$a[3];
 
$value = str_replace($old_link,$new_link,$value);

Весьма корявая регулярка, но есть одно преимущество — она работает 🙂
Регулряка очень узкоспециализированная, но с поставленной задачей справляется.
Вообще не сомневаюсь, что есть более элегантные решения с помощью каких-нибудь библиотек-парсеров, но когда проблему надо решать, то в бой идут все средства, а разбираться как было лучше зачастую приходится уже потом.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*
*