Не могу найти хорошую кодировку для вставки статей в Joomla DB - PullRequest
0 голосов
/ 05 мая 2018

Я создаю скрипт для переноса старого сайта в Joomla. На моем старом сайте все php-скрипты находятся в utf8. Скрипт импорта тоже.

Для создания статей я делаю это:

    $article = JTable::getInstance('content');

    $article->title            = $titre;
    $article->alias            = $alias;
    $article->introtext        = $contenu;
    $article->catid            = $idcat;
    $article->created          = JFactory::getDate()->toSQL();;
    $article->created_by_alias = 'Import';
    $article->state            = 1;
    $article->access           = 1;
    $article->metadesc           = $description;
    $article->metadata         = '{"page_title":"'.$titre.'","author":"","robots":""}';
    $article->language         = '*';

    if (!$article->check())
        print $article->getError();

    if (!$article->store(TRUE))
        print $article->getError();

После этого все хорошо, но у меня есть второй проход, который делает это:

$query = $db->getQuery(true);
$query->select("id,introtext");
$query->from("#__content");
$query->where("1");
$db->setQuery((string) $query);
$messages = $db->loadObjectList();

foreach($messages as $page)
{
    $idarticle=$page->id;

    $dom = new DOMDocument;
    @$dom->loadHTML(utf8_decode($page->introtext));
    ...
    $fields = array("introtext=".$db->quote(utf8_encode($dom->saveHTML())));
    $conditions = array("id='$idarticle'");
    $query->update('#__content')->set($fields)->where($conditions);
    $db->setQuery($query);
    $result = $db->execute();
}

Я пробовал с или без utf8_decode / utf8_encode, и это то же самое: некоторые символы заменяются на ?, например, , но символы с акцентом хороши.

1 Ответ

0 голосов
/ 05 мая 2018

Я нашел решение, не уверен, может ли оно вызвать проблемы: Перед созданием статьи конвертируйте специальные символы следующим образом:

$html=htmlentities($html,ENT_NOQUOTES|ENT_SUBSTITUTE|ENT_DISALLOWED);
$html=str_replace("&lt;","<",$html);
$html=str_replace("&gt;",">",$html);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...