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);

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

Random Posts

  • Аналог Notepad++ в Ubuntu

     Notepad++ — одна из немногих программ, отсутствие которой, лично мне почувствовалось сразу же. Этот пост не о том, как прекрасен […]

  • jQuery Ajax вернуть переменную в success

    Бывают такие задачи: нужно получить значение переменной из ajax запроса. Например у нас есть функция, из которой мы хотим получить […]

  • Ubuntu linux gedit warning

    Не помню как и когда возник этот баг, но он неприятен 🙂 При вызове gedit из терминала, периодически (при каждом […]

  • PHP получить sha256 хэш строки, используя mhash

    К сожалению в php 5 нет встроенной функции для получения sha256 хэша, в отличие от md5. А использовать md5  в […]

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

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

*
*