0

私はPHPにかなり慣れていないので、我慢してください:)

URLをテキスト領域に配置し、それぞれのメタデータを取得する場合に私がやろうとしていること。

スクリプトを作成しましたが、テキスト領域に複数のURLを配置すると、最後に入力したURLのデータのみが返されるので、皆さんが私を助けてくれるかもしれないと思いました:)

<form method="POST">
<textarea name="TAData">
</textarea>
<input type="submit" value="submit"/>
</form>

<div id="checkboxes">
<input type="checkbox" name="vehicle" value="PR" /> Show me the PR<br />
<input type="checkbox" name="vehicle" value="KW Tag" /> Show me the KW tag<br />
<input type="checkbox" name="vehicle" value="Title Tag" /> Show me the Title tag<br />
</div>
<div id="checkboxes">
<input type="checkbox" name="vehicle" value="1stH1" /> Show me the 1st H1<br />
<input type="checkbox" name="vehicle" value="2ndH1" /> Show me the 2nd H1 tag<br />
<input type="checkbox" name="vehicle" value="SeedKW" /> Show me Seed KW's<br />
</div>

<div id="nofloat"></div>

<?php

//make the array 
$TAarray = explode("\n", strip_tags($_POST['TAData'])); 

foreach ($TAarray as $key => &$line) { $line = trim($line); }
            // get the meta data for each url
            $tags = get_meta_tags($line);

unset($tags["content-type"]);
unset($tags["page-type"]);
unset($tags["page-topic"]);
unset($tags["audience"]);
unset($tags["content-language"]);       

            echo '<tr>';
            foreach ($tags as $meta)        
            {
                    echo '<td>' . $meta . '</td>';
            }
            echo '</tr>';

?>
4

2 に答える 2

2

行でtrimを使用した後の}を閉じることは、foreachが終了し、他の操作のループの後に最後の行のみが使用可能になることを意味します。そのブラケットを最後まで動かすだけです。

于 2012-04-11T08:54:35.600 に答える
0

参照とともに使用する場合はforeach、ループの後でその参照を削除することをお勧めします。

foreach ($TAarray as $key => &$line)
{
    $line = trim($line); 
}
unset($line); # remove the reference for safety reasons

しかし、そのコードの後で繰り返さないので$TAarray、とにかくコードは不要です。余分なコードを書かないでください。私は次のことを提案します:

//make the array 
$TAarray = explode("\n", strip_tags($_POST['TAData'])); 
$TAarray = array_map('trim', $TAarray);

そして、私はあなたがそれをそれ自身の関数に入れることを提案します:

/**
 * @param string $html
 * @return string[] lines
 */
function getTrimmedTextLinesArrayFromHTMLBlock($html)
{
    $text = strip_tags($html);
    $lines = explode("\n", $text);
    $trimmed = array_map('trim', $lines);
    return $trimmed;
}

その後、適切と思われる場所で使用できます。この関数は、さまざまな入力を使用して個別にテストすることもできます。

$lines = getTrimmedTextLinesArrayFromHTMLBlock($_POST['TAData']));
$blacklist= array("content-type", "page-type", "page-topic", 
                "audience", "content-language");
foreach ($lines as $line)
{
    if (! $tags = get_meta_tags($line)) continue;
    echo '<tr>';
    foreach ($tags as $key => $meta)
    {
        if (in_array($key, $blacklist)) continue;
        echo '<td>' . $meta . '</td>';
    }
    echo '</tr>';
}

これがお役に立てば幸いです。

于 2012-04-11T09:28:41.567 に答える