За последние 24 часа нас посетил 17991 программист и 1582 робота. Сейчас ищет 1381 программист ...

Браузер добавляет к внешним урл в контенте адрес сайта

Тема в разделе "Прочее", создана пользователем konon, 7 июн 2015.

  1. konon

    konon Активный пользователь

    С нами с:
    6 июн 2015
    Сообщения:
    10
    Симпатии:
    0
    В тексте страницы после редактирования FCKEditor прописана внешняя ссылка:

    <a href="http://www.sobor.by">...</a>

    или точнее c html-примитивами:

    <a href=&#34http://www.sobor.by&#34>...</a>

    а броузер выводит эту страничку с добавлением урл текущего сайта:

    http://www.mysait.by/"http://www.sobor.by"

    Страница естественно не находится.
    Если убрать ковычки:

    <a href=http://www.sobor.by>...</a>

    то всё нормально.Броузер не добавляет урл текущего сайта.
    Подскажите, как это побороть?
     
  2. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    не знаю поэтому-ли, но ты забыл поставить тут тэг
    Код (PHP):
    1. <a href="http://www.sobor.by"></a>
     
  3. konon

    konon Активный пользователь

    С нами с:
    6 июн 2015
    Сообщения:
    10
    Симпатии:
    0
    Извиняюсь!
    Тэг я просто пропустил, когда набирал свой пост.
    Сейчас вот исправил.
    Дело в том, что текст для странички вводится с помощью FCKEditor.
    С помощью FCKEditor генерятся и html-код ссылок вот такого вида:

    <a href=&#34http://www.sobor.by&#34>...</a>

    А браузер превращает их вот в такой:

    http://www.mysait.by/"http://www.sobor.by"

    Убирать после FCKEditor html-примитивы ковычек вот так:

    <a href=http://www.sobor.by>...</a>

    как-то сложновато, ведь в тексте может быть много внешних ссылок.
    Не знаю, что делать.
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    может в редакторе разрешить хтмл код
     
  5. konon

    konon Активный пользователь

    С нами с:
    6 июн 2015
    Сообщения:
    10
    Симпатии:
    0
    В редакторе FCKEditor есть кнопка "Источник", при нажатии на которую редактор переключается в режим исходного кода. Этот режим рекомендуется только для опытных пользователяй. Для работы с ним необходимы знания HTML и CSS. Но дело в том, что с админкой работают пользователи не имеющие представления об HTML. Им по силам освоить только кнопки редактора.
    Написать же регулярное выражение для устранения " (или примитива двойной кавычки &#34;) из тэга href= мне не по силам. Я так хорошо не знаю регулярных выражений. Может кто подскажет, как написать регулярку чтобы убрать " (или примитив двойной кавычки &#34;) только в тэге href= ???
     
  6. osvical

    osvical Новичок

    С нами с:
    9 янв 2015
    Сообщения:
    67
    Симпатии:
    0
    все дело в этих &#34 должны быть обычные двойные кавычки.
     
  7. konon

    konon Активный пользователь

    С нами с:
    6 июн 2015
    Сообщения:
    10
    Симпатии:
    0
    Да точно так: при выводе контента должны быть не примитивы (по крайней мере в тэге href=), а спецсимволы.
    Спасибо всем, кто отозвался на мою проблему и участвовал в обсуждении.
    Проблема решена с помощью двух операторов:
    <code>
    1. $nnews=str_replace('&#34;','&quot;',$row['nnews']);
    2. $nnews=htmlspecialchars_decode($nnews, ENT_QUOTES);
    </code>
    Редактор CKeditor (раньше назывался FCKeditor) в конце сеанса редактирования заменяет двойную кавычку на примитив &#34;
    Записываем в базу текст с примитивом двойной кавычки &#34;
    Перед выводом контента извлекаем его из базы и заменяем примитив &#34 на примитив &quot; потому что функция htmlspecialchars_decode() распознаёт именно этот примитив. Далее применяем эту самую функцию htmlspecialchars_decode(), которая заменяет примитивы на спец.символы (&quot; на двойную кавычку). Тогда браузер отображает всё как надо.
    Можно обойтись одним оператором и преобразовать только двойную кавычку, а остальные спец.символы оставить как примитивы:
    <code>
    1. $nnews=.str_replace('&#34;','"',$row['nnews']);
    </code>
    Но это как-то некрасиво и наверно чревато в дальнейшем неприятностями
     
  8. osvical

    osvical Новичок

    С нами с:
    9 янв 2015
    Сообщения:
    67
    Симпатии:
    0
    скорее всего это делает не редактор, а функция, записывающая статью в бд. сам в обучающих целях пишу потихоньку цмс и этот редактор у меня подключен. пока ничего не делает, просто выводит набитый контент над собой. двойные кавычки остаются двойными кавычками, все работает правильно.