2

ヘッダーにメタオープングラフタグを追加するために使用するプラグインを編集しようとしています。問題は、サイト全体で1枚の写真しか選択できないことです。これが私が行ったことです。

preg_match_all('/<img .*?(?=src)src=\"([^\"]+)\"/si', $hdog_base, $image);

if (strlen($hdog_base) <= 25) 
{
    if (substr($image[0], 0, 4) != 'http') 
    {
        $image[0] = JURI::base().$image[0]; 
    }
    $hdog_image_tmp = $image[0];
}
else
{
    if (substr($image[1], 0, 4) != 'http') 
    {
        $image[1] = JURI::base().$image[1]; 
    }
    $hdog_image_tmp = $image[1];
}
$hdog_image =   '<meta property="og:image" content="'.$hdog_image_tmp.'" />
';

$ hdog_baseは、現在表示しているWebページです。最初のifステートメントはロゴ(例のホームページに使用)である最初の画像を表示し、elseは2番目の画像(各ページで異なる)を表示しますが、結果は次のようになります。 、私がホームページにいるのか、サイトの他の場所にいるのかに関係なく:

<meta property="og:image" content="http://mysite.com/Array" />

助言がありますか?

前もって感謝します、

更新:私が犯している最大の欠点は、実際のWebページではなく、URLで画像を見つけようとしていることです。しかし、リンクだけです。では、現在のページのコンテンツを文字列で取得するにはどうすればよいでしょうか。リンクに過ぎない$hdog_baseの代わりに。

更新、解決済み:

使用しました

$buffer = JResponse::getBody();

HTMLでWebページを取得するには

その後、残りのDOM

$doc = new DOMDocument();
@$doc->loadHTML($buffer);

$images = $doc->getElementsByTagName('img');
if (strlen($hdog_base) <= 26) 
{
    $image = $images->item(0)->getAttribute('src');
} 
else 
{
    $image = $images->item(1)->getAttribute('src');
}
if (substr($image, 0, 4) != 'http') $image = JURI::base().$image;
$hdog_image =   '<meta property="og:image" content="'.$image.'" />
';

あなたの助けをたくさんのcpilkoに感謝します!:)

4

1 に答える 1

3

preg_match_all正規表現で複数のサブパターンを使用すると、多次元配列が返されます。あなたのコード$image[n]には配列があります。配列をphpで文字列としてキャストすると、実行中にテキストが返されますArray

編集:正規表現を使用してHTMLを解析することは理想的ではありません。あなたはそれをでやったほうがいいですDOMDocument

$doc = new DOMDocument();
@$doc->loadHTML($hdog_base);

$images = $doc->getElementsByTagName('img');
if (strlen($hdog_base) <= 25) {
    $image = $images->item(0)->getAttribute('src');
} else {
    $image = $images->item(1)->getAttribute('src');
}
if (substr($image[0], 0, 4) != 'http') $image .= JURI::base();
$hdog_image =   '<meta property="og:image" content="'.$hdog_image_tmp.'" />
';
于 2012-10-17T17:52:58.163 に答える