Чтение китайских иероглифов в HTML с помощью PHP

В проекте Symfony у меня есть что-то вроде этого:

$crawler = new Crawler($this->bigString());
$array = array();
foreach($crawler->filter('.editable') as $domElement )
{
    $innerHtml = $this->getChildHtml($domElement);
    $array[$domElement->getAttribute('id')] = $innerHtml;
    $domElement->nodeValue = '{{ listEditables["' . $domElement->getAttribute('id') . '"] }}';
    $crawler->addNode($domElement);
 }
$page->setEditables($array);
$em->persist($page);
$em->flush();

Где возвращает метод bigString

<div class="info pmt0 wrap">
  <p id="p_editable_2" class="editable">所谓设计,创于人,且用于人......</p>
  ... a bunch of other html element with Chinese in it ...
</div>

и я использую

private function getChildHtml($node) 
{
    $innerHtml= '';
    $children = $node->childNodes;

    foreach( $children as $child )
    {
        $innerHtml .= sprintf( '%s%s', $innerHtml, $child->ownerDocument->saveXML( $child ) );
    }

    return $innerHtml;
}

чтобы получить внутренний HTML.

Я не могу заставить сохраненные элементы точно представлять китайские иероглифы, все, что я получаю, — это чепуха. С использованием

 var_dump($innerHtml);

показывает, что getChildHtml() не возвращает исходные китайские символы. Любая идея, как я могу заставить это сделать это?

См. также:  Автоматически входить в сеть IIT (или большинство корпоративных прокси-серверов)
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 2
  1. Afunakwa

    Согласно этому вопросу, sprintf вам не поможет. Вместо этого используйте что-то вроде mb_substr().

    $innerHtml .= mb_substr($child->ownerDocument->saveXML( $child ), 0);
    

    Кроме этого, скорее всего, правильная кодировка Вам помогут.

    mb_substr не помогает. Я знаю, что это проблема с кодировкой, но я не знаю, как ее решить. person Afunakwa; 19.08.2017

    Что ж, убедитесь, что все файлы закодированы в кодировке utf8, и установите ее вручную в файле php. person Afunakwa; 19.08.2017

    В php.ini utf-8 имеет кодировку по умолчанию, но ничего не меняет person Afunakwa; 19.08.2017

    Затем проверьте saveXML(). Кажется, это следующий кандидат. person Afunakwa; 19.08.2017

    Да, это виновник. person Afunakwa; 19.08.2017

  2. Afunakwa

    Оказывается, проблема была с Symfony Crawler.

    Как указано здесь, хорошим обходным путем является запись

    $crawler = new Crawler();
    $crawler->addHtmlContent($this->bigString());
    

    вместо

    $crawler = new Crawler($this->bigString());
    

    так как метод addHtmlContent по умолчанию кодируется в UTF8

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

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: