2017-02-06 7 views
2

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

$string = preg_replace('/<meta content="website"[^>]+>/', '<meta content="website" property="og:type">',$stringFile); 

Текущие METAS:

<meta content="text/html; charset=utf-8" http-equiv="Content-Type"> 
<meta content="dynamic text here" property="og:title"> 
<meta content="lots of text ... lots of text ... lots of text " property="og:description"> 
<meta content="website" property="og:type"> 
<meta content="version" property="og:url"> 
<meta content="/folder/folder/folder/folder/logo.jpg" property="og:image"> 

Желаемая выход (обратите внимание на текст/HTML остается без изменений):

<meta content="text/html; charset=utf-8" http-equiv="Content-Type"> 
<meta content="" property="og:title"> 
<meta content="" property="og:description"> 
<meta content="" property="og:type"> 
<meta content="" property="og:url"> 
<meta content="" property="og:image"> 
+1

Что-то вроде этого? https://regex101.com/r/9ptqiJ/1 – MYGz

ответ

1

Что-то вдоль линий .. .

<?php 


$html = '<meta content="text/html; charset=utf-8" http-equiv="Content-Type"> 
    <meta content="dynamic text here" property="og:title">...'; 

$domd = new DOMDocument(); 
libxml_use_internal_errors(true); 
$domd->loadHTML($html); 
libxml_use_internal_errors(false); 

$domx = new DOMXPath($domd); 
$items = $domx->query("//meta[@content]"); 

foreach($items as $item) { 
    if (strpos($item->getAttribute('content'),'text/html') !== false) continue; 
    $item->removeAttribute("content"); 
} 

echo $domd->saveHTML(); 

... должен сделать трюк. Избегайте регулярных выражений для управления html.

В качестве альтернативы, если условие с использованием регулярных выражений, как было предложено Toto:

<?php 


$html = '<meta content="text/html; charset=utf-8" http-equiv="Content-Type"> 
    <meta content="dynamic text here" property="og:title">...'; 

$domd = new DOMDocument(); 
libxml_use_internal_errors(true); 
$domd->loadHTML($html); 
libxml_use_internal_errors(false); 

$domx = new DOMXPath($domd); 
$items = $domx->query("//meta[@content]"); 

foreach($items as $item) { 
    if (preg_match('~\btext/html\b~',$item->getAttribute('content'))) continue; 
    $item->removeAttribute("content"); 
} 

echo $domd->saveHTML(); 
+0

Это путь, но вы должны сохранить 'text/html' в соответствии с запросом. – Toto

+0

О да. Я пропустил эту часть. – AntonChanning

+0

Хорошо, спасибо за редактирование. Я думаю, что регулярное выражение находится в элементе, анализируя строку внутри значения атрибута. Тем не менее, я думаю, что в этом случае это может быть излишним, я бы, наверное, использовал strpos. http://www.w3schools.com/php/func_string_strpos.asp – AntonChanning

Смежные вопросы