Модераторы: Aliance, IZ@TOP, SamDark, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DOMDocument вместо русских букв ссылки, вUTF8 русские буквы ввиде р и т.п. 
:(
    Опции темы
yalo
Дата 26.8.2012, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 24.5.2006

Репутация: нет
Всего: 2



Здравствуйте, уважаемые жители форума Винград:)
 У меня такой вопрос. Почему при использовании объекта DOMDocument русский текст при просмотре html-кода в браузере заменен на ссылки? Поясню.
Вот упрощенный для наглядности xml:
Код

<?xml version="1.0"  encoding="UTF-8"?>
<text>просто русский текст</text>

а вот код пхп, пользующий этот xml (тоже упрощен):
Код

<?php
$xml = new DOMDocument ('1.0', 'UTF-8');
$xml->load ('test.xml');
echo $xml->saveHTML ();
echo $html;

При запуске пхп-скрипта в браузере все будет выглядеть красиво, а именно получим обычный черный текст "просто русский текст" в белом окне браузера. Но если посмотрим сгенерённый для браузера html-код, то там мы увидим такое вот чудо "<text>просто русский текст</text>" Подскажите, пожалуйста, в чем может быть причина. Все тексты в UTF-8 сохранены.
Сначала задавала свой вопрос в другой ветке форума http://forum.vingrad.ru/forum/topic-226949...0%BE%D0%B2.html - там я в дополнение к существующему похожему вопросу уже присоединилась и описала свой детально, но мне посоветовали сюда обратиться, поскольку до преобразования xslt, как я выяснила, у меня дело в общем-то и не доходило даже..
Заранее спасибо:)



Это сообщение отредактировал(а) yalo - 26.8.2012, 14:59
PM MAIL ICQ   Вверх
Fortop
Дата 26.8.2012, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: нет
Всего: 42



Цитата(yalo @  26.8.2012,  14:59 Найти цитируемый пост)
 чудо "<text>просто русский текст</text>"

А что в этом чудного? smile

По факту, если вам мешают entities, то делаем так


Код

echo html_entity_decode($xml->saveHTML (), ENT_COMPAT , 'UTF-8');



--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
yalo
Дата 27.8.2012, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 24.5.2006

Репутация: нет
Всего: 2



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

& # 1055; & # 1088;& # 1080;& # 1074;& # 1077;& # 1090; & # 1052;& # 1080;& # 1088; (пробелы надо убрать, просто если я их уберу, то движок форума их преобразует в буквы, вот оно че, михалыч, оказывается..), а появился сам текст..

Fortop, а как-то без постоянного применения html_entity_decode можно все же обойтись? Это ж наверное на скорости скажется. Может лучше разобраться почему такое происходит, и саму причину устранить, а не последствие?

Это сообщение отредактировал(а) yalo - 27.8.2012, 15:27
PM MAIL ICQ   Вверх
Fortop
Дата 27.8.2012, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: нет
Всего: 42



Цитата(yalo @  27.8.2012,  15:22 Найти цитируемый пост)
Fortop, а как-то без постоянного применения html_entity_decode можно все же обойтись? 

Без понятия, глубоко не копал и не встречался.
Посмотрите, посмотрите исходники и документацию по libxml

Но чем вам это мешает? Если не мешает - то оставьте как есть.

Добавлено через 1 минуту и 10 секунд
Цитата(yalo @  27.8.2012,  15:22 Найти цитируемый пост)
Это ж наверное на скорости скажется

У вас, как я понял из другой ветки, xslt идет, так что сильно хуже не будет


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
yalo
Дата 29.8.2012, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 24.5.2006

Репутация: нет
Всего: 2



Fortop
Цитата(Fortop @  27.8.2012,  22:47 Найти цитируемый пост)
У вас, как я понял из другой ветки, xslt идет, так что сильно хуже не будет 

В смысле?smile тормознее xslt уже ничего не будет?smile
PM MAIL ICQ   Вверх
Fortop
Дата 29.8.2012, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: нет
Всего: 42



Цитата(yalo @  29.8.2012,  12:33 Найти цитируемый пост)
В смысле? тормознее xslt уже ничего не будет? 

Тормознее сделать всегда можно.
Но он не быстрый.

Поэтому одна функция вас не убьет.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
krypt3r
Дата 30.8.2012, 06:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 9.6.2009

Репутация: 2
Всего: 16



Код

$tr = $proc->transformToDoc ($xml);
echo $tr->saveHTML ($tr->documentElement);

Сущностей, которые ТС называет ссылками, при таком использовании вроде не должно быть.
PM MAIL   Вверх
yalo
Дата 23.9.2012, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 24.5.2006

Репутация: нет
Всего: 2



вот код:
Код

    $xml = new DOMDocument('1.0', 'utf-8');
    $xml->formatOutput = true;
    $elem = $xml->createElement('text', 'Русские буквы');
    $xml->appendChild($elem);
    echo $xml->saveHTML ();


Запустите его, пожалуйста, у себя, и посмотрите не только отображение в браузере, а сам исходный код через "просмотреть исходный код" или что-то подобное (в зависимости от браузера). 
У меня в исходнике идут цифры вместо русских букв (ссылки, сущности - не важно уже как их верно назвать в данном случае, мне они просто не нужны здесь).
А по поводу 
Цитата(krypt3r @  30.8.2012,  06:42 Найти цитируемый пост)

$tr = $proc->transformToDoc ($xml);
echo $tr->saveHTML ($tr->documentElement);


мне не нужно, чтобы исправлялся созданный с помощью php xml только при прогонке через  xslt-процессор (да и не исправляется в общем-то им такое, проверяла, но не в этом суть), я хочу чтобы xml созданный выглядел адекватно при просмотре его внутренности, мало ли куда он мне понадобится, может что-то я и не буду скармливать xslt-процессору..

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


Это сообщение отредактировал(а) yalo - 23.9.2012, 11:00
PM MAIL ICQ   Вверх
krypt3r
Дата 24.9.2012, 06:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 9.6.2009

Репутация: 2
Всего: 16



Цитата
я хочу чтобы xml созданный выглядел адекватно

Эмм, речь о saveHTML(), не? XML тут каким боком?
Цитата
Кстати, может быть у кого-то адекватно отобразится мой код в исходнике?

Ни у кого. Подобное поведение везде проявляется - это особенность libxml2
PM MAIL   Вверх
petas
Дата 26.8.2013, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



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

& #1055 & #1088 & #1086 & #32 & #72 & #101 & #119

долго искал и понял что
1 нехватает ";" перед & чтобы получилось
Код

& #1055;& #1088;& #1086;& #32;& #72;& #101;& #119;

далее немного секаса и интернетом и находим функцию

Код

function decode_entities($text) {
    $text= html_entity_decode($text,ENT_QUOTES,"cp1251"); #NOTE: UTF-8 does not work!
    $text= preg_replace('/&#(\d+);/me',"chr(\\1)",$text); #decimal notation
    $text= preg_replace('/&#x([a-f0-9]+);/mei',"chr(0x\\1)",$text);  #hex notation
    return $text;
}



отличие только в том что у автора вместо "cp1251" была какая-то другая кодировка

на выходе получаем нормальный windows-1251 текстик с английскими буквами и спецсимволами


Это сообщение отредактировал(а) petas - 26.8.2013, 17:07
PM MAIL   Вверх
Google
  Дата 21.9.2017, 11:25 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: X технологии | Следующая тема »


 




[ Время генерации скрипта: 0.1152 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.