Вопрос кодировки строки HTML в PHP - PullRequest
1 голос
/ 21 июня 2011

У меня есть строка, содержащая HTML. Как бы я htmlentity строки, чтобы все, кроме тегов, были закодированы? Например:

$foo = '<div class="link">Here\'s is a link: "<a href="http://www.example.com">Doors & windows</a>'</div>';

Я хочу преобразовать его в

$out = '<div class="link">Here\'s is a link: &quot;<a href="http://www.example.com">Doors &amp; windows</a>&quot;</div>';

Ответы [ 3 ]

1 голос
/ 21 июня 2011

В этом фрагменте кода показана функция, которая будет загружать некоторые xml (убедитесь, что по крайней мере открытые теги имеют закрывающую подвеску и т. Д., В противном случае вы увидите / прочитаете некоторые ошибки), а затем примените htmlentities ко всем текстовым узлам. На самом деле я не имею ни малейшего понятия о том, что вам нужно, но, вероятно, это делает вас счастливым:

$foo = '<div class="link">Here\'s is a link: <a href="http://www.example.com">Doors & windows</a></div>';

echo text_htmlentities(utf8_encode($foo));

/**
 * add htmlentities onto the text-nodes of an
 * xml fragment.
 * 
 * @param string $foo xml fragment (utf8)
 * @return string
 */
function text_htmlentities($foo) {
    $foo = str_replace('&', '&amp;', $foo);
    $dom = new DOMDocument;
    $dom->loadXml($foo);
    $xpath = new DomXpath($dom);
    foreach($xpath->query('//text()') as $node) {
        $node->nodeValue = htmlentities($node->nodeValue, ENT_QUOTES, 'UTF-8', false);
    }
    return str_replace('&amp;','&', $dom->saveXml($dom->firstChild));
}

Выход:

<div class="link">Here&#039;s is a link: <a href="http://www.example.com">Doors &amp; windows</a></div>
1 голос
/ 21 июня 2011

Сначала замените скобки другим токеном, позвоните htmlentities, затем преобразуйте обратно.

$html = str_replace("<","***OPENBRACKET***",$html);
$html = str_replace(">","***CLOSEBRACKET***",$html);

$html = htmlentities($html);

$html = str_replace("***OPENBRACKET***","<",$html);
$html = str_replace("***CLOSEBRACKET***",">",$html);
0 голосов
/ 21 июня 2011

Попробуйте использовать html_entity_decode function

...