0

Как правильно сохранять текст созданный в CKeditor? Получаю текст и перед записью в БД (поле BLOB) делаю экранирование спецсимволов

htmlspecialchars($_REQUEST['text']);

Если текст вводится вручную, то проблем замечено не было, если текст копирую и вставляю, то он обрезается по первый пробел. При повторной вставке и записи может обрезать в другом месте.

Код записи текста в БД:

function article_save() {
    global $db;
    $name = htmlspecialchars($_REQUEST['name_head']);
    $text = htmlspecialchars($_REQUEST['text']);
    if(!isset($_REQUEST['id']))
        $query = "INSERT INTO articles (`data`, `name`, `text`, `view`) VALUES (".time().", '$name', '$text', 1)";
    else
        $query = "UPDATE articles SET `name`='".$name."', `text`='".$text."' WHERE id=".$_REQUEST['id'];
    if($db->query($query))
        echo 1;
    else
        echo "error";
}
thecoder
  • 562

2 Answers2

0

htmlspecialchars нужно использовать при выводе данных, а не при сохранении в базу.

Перед вставкой в базу текста из CKEDITOR нужно экранировать спецсимволы, например функцией mysql_real_escape_string или real_escape_string для mysqli.

Также проверьте длину поля в базе данных и ту длину строки, которую пытаетесь записать в базу. Т.к. при копировании в CKEDITOR, тот может сохранять форматирование исходного текста с помощью атрибута style, добавляя css в каждый p/div. В результате длина текста значительно возрастает, что сразу вроде бы и не заметно.

Ещё кодировку желательно использовать одну и ту же, чтобы кодировка строки совпадала с кодировкой БД.

jekaby
  • 2,824
  • с длиной поля и кодировкой все в порядке. При копировании копируется только

    текст

    и все.
    – thecoder Jan 11 '16 at 11:32
  • @thecoder думаю что проблема всё таки в кодировке строки. $_REQUEST['text'] тут то, что нужно? На каком то сложном символе текст обрезается при вставке. Если добавить преобразование к utf8, меняется что-нибудь? http://ru.stackoverflow.com/questions/446408/mysql-%D0%BE%D0%B1%D1%80%D0%B5%D0%B7%D0%B0%D0%B5%D1%82-%D1%82%D0%B5%D0%BA%D1%81%D1%82-%D0%BD%D0%B0-%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D0%BC-%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D0%B5-%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BA%D0%B5#answer-446459 – jekaby Jan 11 '16 at 12:51
0

Так как текст из редактора передается через ajax для записи в базу, то пришлось сначала выполнить

encodeURI(text);

затем в скрипте php

urldecode($_POST['text']);

thecoder
  • 562