в моем HTML после очищения - PullRequest
3 голосов
/ 25 марта 2010

У меня есть база данных, которую я перестраиваю, структура таблицы была дерьмом, поэтому я переносил некоторые данные из одной таблицы в другую. Эти данные, похоже, были скопированы из продукта MSO, поэтому, когда я получаю данные, я очищаю их с помощью htmlpurifier и некоторого str_replace в php. Вот чистая функция:

   function clean_html($html) {
    $config = HTMLPurifier_Config::createDefault();
    $config->set('AutoFormat','RemoveEmpty',true);
    $config->set('HTML','AllowedAttributes','href,src');
    $config->set('HTML','AllowedElements','p,em,strong,a,ul,li,ol,img');
    $purifier = new HTMLPurifier($config);

    $html = $purifier->purify($html);

    $html = str_replace(' ',' ',$html);
    $html = str_replace("\r",'',$html);
    $html = str_replace("\n",'',$html);
    $html = str_replace("\t",'',$html);
    $html = str_replace('  ',' ',$html);
    $html = str_replace('<p> </p>','',$html);
    $html = str_replace(chr(160),' ',$html);

    return trim($html);
   }

Однако, когда я помещаю результаты в мою новую таблицу и выводю их на ckeditor, я получаю эти три символа.

Затем у меня есть функция javascript, которая вызывается для удаления специальных символов из содержимого ckeditor. это тоже не убирает

  function remove_special(str) {
    var rExps=[ /[\xC0-\xC2]/g, /[\xE0-\xE2]/g,
    /[\xC8-\xCA]/g, /[\xE8-\xEB]/g,
    /[\xCC-\xCE]/g, /[\xEC-\xEE]/g,
    /[\xD2-\xD4]/g, /[\xF2-\xF4]/g,
    /[\xD9-\xDB]/g, /[\xF9-\xFB]/g,
    /\xD1/,/\xF1/g,
    "/[\u00a0|\u1680|[\u2000-\u2009]|u200a|\u200b|\u2028|\u2029|\u202f|\u205f|\u3000|\xa0]/g", 
    /\u000b/g,'/[\u180e|\u000c]/g',
    /\u2013/g, /\u2014/g,
    /\xa9/g,/\xae/g,/\xb7/g,/\u2018/g,/\u2019/g,/\u201c/g,/\u201d/g,/\u2026/g];
    var repChar=['A','a','E','e','I','i','O','o','U','u','N','n',' ','\t','','-','--','(c)','(r)','*',"'","'",'"','"','...'];

    for(var i=0; i<rExps.length; i++) {
        str=str.replace(rExps[i],repChar[i]);
    }

      for (var x = 0; x < str.length; x++) {
    charcode = str.charCodeAt(x);
          if ((charcode < 32 || charcode > 126) && charcode !=10 && charcode != 13) {
              str = str.replace(str.charAt(x), "");
          }
      }
      return str;
  }

Кто-нибудь знает из рук, что мне нужно сделать, чтобы избавиться от них. Я думаю, что они могут быть какой-то цитатой.

Ответы [ 3 ]

1 голос
/ 25 марта 2010

Была похожая проблема: php удалить / идентифицировать этот символ

Символ - это ЗАМЕНА ХАРАКТЕРА (U + FFFD) . Используется, когда в коде UTF произошла ошибка:

FFFD � REPLACEMENT CHARACTER

 - used to replace an incoming character whose value 
   is unknown or unrepresentable in Unicode

В большинстве случаев это означает, что некоторые данные интерпретируются в кодировке UTF, тогда как данные кодируются не в этой кодировке, а в другом.

Моя проблема заключалась в вставке текста из продуктов Microsoft Office в HTML или в базу данных. Крупнейшие нарушители, кажется, emdash и умные цитаты.

1 голос
/ 25 марта 2010

Все ваши кодировки не в порядке. • указывает на трехбайтовый символ в кодировке UTF-8.

Некоторые вещи, которые вам нужно открыть

  • Какова была кодировка старой таблицы?
  • Какова кодировка новой таблицы?
  • Какая кодировка страницы, на которой отображается ckeditor?

Похоже, HTMLPurifier по умолчанию - UTF-8 , поэтому вам действительно нужно знать о кодировке ваших данных!

1 голос
/ 25 марта 2010

Первый ответ в этой ветке SO должен указать вам правильное направление и упростить вашу функцию remove_special ().

...