Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> htmlspecialchars_decode или передача спец символов, спец символы 
V
    Опции темы
crang
Дата 13.7.2009, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток!
Есть скрипт, который анализирут структуру XML и вставляет дополнительный узел:
Код

    ...
    $tmpMap = "<img src = " . $map . " width= 180  height=180  />";
    $mapIco = htmlspecialchars_decode($tmpMap); 
    $xmlMap = $dom->createElement('mapico', $mapIco);
    $xmlServer->appendChild($xmlMap);
    ... 


результат выглядит так:

Код

<TD STYLE="font-size:14pt font-family:serif">&lt;img src = pics/de_nuke.jpg width= 180  height=180  /&gt;</TD>
 т.е. на странице вместо изображения виден его HTML код

Вопрос - как нормально передавать из PHP спец символы? Или конкретно - как передать строку 
Код

<img src = somemap.jpg width= 180  height=180  />
?
PM MAIL   Вверх
skyboy
Дата 13.7.2009, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

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



Цитата(crang @  13.7.2009,  13:58 Найти цитируемый пост)
Или конкретно - как передать строку 

дело в том, что у тебя уже строка.
чтоб корректно запихнуть строку
Цитата

<img src = somemap.jpg width= 180  height=180  />

в создаваемый элемент <mapico>, в строке переводятся в сущности все спецсимволы. и происходит это в 
Цитата(crang @  13.7.2009,  13:58 Найти цитируемый пост)
$dom->createElement('mapico', $mapIco);
 потому htmlspecialchars_decode, отрабатывающий шагом ранее, никакого влияния не оказывает.

Добавлено через 4 минуты и 8 секунд
я думаю(предположение гипотетическое: с Dom из-под PHP не работал) должно сработать подобное:
Код

$str = "<img src='somemap.jpg' width='180'  height='180'  />";
$dom= new DOMDocument();
$dom->loadHTML($str); 
$tmpMap = $dom->documentElement;
$xmlMap = $dom->createElement('mapico');
$xmlMap->appendChild($tmpMap);
$xmlServer->appendChild($xmlMap);

PM MAIL   Вверх
crang
Дата 13.7.2009, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



к сожалению ошибка:
Fatal error: Uncaught exception 'DOMException' with message 'Wrong Document Error' in /usr/home/crang/public_html/st/index.php:26 Stack trace: #0 /usr/home/crang/public_html/st/index.php(26): DOMNode->appendChild(Object(DOMElement)) #1 {main} thrown in /usr/home/crang/public_html/st/index.php on line 26

вот что я оставил:

Код

    $str = "<img src = " . $map . " width= '180'  height='180'  />";
    $dom->loadHTML($str); 
    $tmpMap = $dom->documentElement;
    $xmlMap = $dom->createElement('mapico');
    $xmlMap->appendChild($tmpMap);
    $xmlServer->appendChild($xmlMap);


экземпляр $dom создан ранее, поэтому твою строку 2 опустил..
и попутно 2 вопроса:
1. не затирает ли метод loadHTML уже созданную структуру $dom?
2. не совсем понятен смысл строки tmpMap = $dom->documentElement , т.е. как потом при вызове метода appendChild($tmpMap) ПХП поймет какое значение добавлять?

PM MAIL   Вверх
solenko
Дата 13.7.2009, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



crang, используйте CDATA


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
skyboy
Дата 13.7.2009, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


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

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



кстати, да.
я пытался придумать, как верстку из строки вставить в структуру XML. Если же тебе надо просто для "транспорта" строку запихнуть в структуру, а потом оттуда изъять - используй CDATA.
Цитата(crang @  13.7.2009,  14:48 Найти цитируемый пост)
не затирает ли метод loadHTML уже созданную структуру $dom?

да, заменяет. созданной из отпарсенной строки, переданной аргументом.
Цитата(crang @  13.7.2009,  14:48 Найти цитируемый пост)
не совсем понятен смысл строки tmpMap = $dom->documentElement

в $dom - переменная класса DOMDocument. Чтоб вставить через appendChild в другой элемент, надо иметь объект класса DOMNode. $dom->documentElement возвращает как раз первый элемент класса DOMNode(которая наследует класс DOMElement).
Но это был чисто теоретический изыск. Скорее всего, опираясь только на документацию, я что-то не так понял и допустил ошибку.
PM MAIL   Вверх
crang
Дата 14.7.2009, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

<TD STYLE="font-size:14pt font-family:serif">
      <xsl:apply-templates select="mapico" />
      <img src="{mapico/@img}" width="180"/>
</TD>


а в пхп скрипте передал атрибуты:

Код

    $map = "pics/" . $picdir . $data->getElementsByTagName("map")->item(0)->nodeValue . ".jpg";  
    $xmlMap = $dom->createElement('mapico');
    $mapnode = $xmlServer->AppendChild($xmlMap);
    $mapnode->setAttribute('img',$map);  


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


 




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


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

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