2017-02-06 13 views
2

これらのメタをすべてリセットして空のコンテンツ属性を持たせたいとします。私はコンテンツが何に設定されているか知っている場合、これを行うことができる正規表現を持っています。文字列ファイルからメタタグからテキストを削除する

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

現在のメタ情報:

<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"> 

所望の出力(text/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を操作するための正規表現は避けてください。また

、東都により示唆されるように条件は正規表現を使用している場合:このような

<?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

関連する問題