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

  • PHP Удалить пустые элементы массива

    Как ни странно ни разу не было ситуации, когда необходимо было удалить пустые элементы массива, но к счастью есть простой […]

  • Установка модулей PHP в LAMP на Ubuntu

    В данном примере смотрим Ubuntu 11.10, думаю для 12.04 и 12.10 это тоже будет актуально. Способов много, от перекомпиляции php […]

  • MySQL error USING BTREE

    Только начинаю понимание этой проблемы. При импорте дампов сделанных через СУБД (phpMyAdmin, adminer.php) или ssh-командой возникает ошибка в районе строки […]

  • Самый простой jQuery rollover

    Итак, 2011-08-22 стартуют поиски самого простого jQuery ролловера. материал будет меняться Что такое Rollover? Это когда наводишь на изображение, и […]

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

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

*
*