2012-04-03 4 views
1

に掲載される前に、nofollowをなどへのすべてのリンクを変更しようとしました。私が試したは、私は彼らが私は彼らがMySQLのDBに掲載される前などをnofollowをするためにPHPの文字列内のすべてのリンクを変更しようとしたデシベル

どちらの行は動作しませんでした:

$group_description = preg_replace('/\b<a href="\b/', '<a rel="nofollow" href="/out/out.php?url=', $group_description); 

$group_description = str_replace('<a href="', '<a rel="nofollow" href="/out/out.php?url=', $group_description); 

内の両方の結果:

$html = '<a href="/foo">foo</a> <a href="/bar">bar</a>'; 

$dom = new DomDocument(); 
$dom->loadHTML($html); 

$as = $dom->getElementsByTagName('a'); 
foreach($as as $a) { 
    $a->setAttribute('rel', 'nofollow'); 
    $a->setAttribute('href', '/out/out.php?url=' . rawurlencode($a->getAttribute('href'))); 
} 

$out = simplexml_import_dom($dom->getElementsByTagName('body')->item(0))->asXML(); 
$out = preg_replace('#<body>(.*)</body>#', "$1", $out); 
echo $out; 

私は興奮していないよ:あなたはこれを行うにはDomDocumentを使用することができます<a href="%5C%22http://www.website.net%5C%22">keyword</a>

+1

「うまくいかない」とはどういう意味ですか? – jprofitt

+0

1.データをデータベースに移動させないでください。途中でそれを混乱させる。 (パフォーマンスが必要な場合は、キャッシュ列を保持してください)。 – Quentin

+0

2. [正規表現](http://stackoverflow.com/a/1732454/19068)でHTMLを解析しようとしないでください! (特に、非常に標準的なテンプレートに適合するHTMLではない場合)。 – Quentin

答えて

0

最後の3行ですが、その部分は最終出力の使い方、フラグメント、または完全なHTMLドキュメントに依存します。上記はフラグメントを引き出しますが、これを行うより良い方法があります。それ以外の場合は、$ dom-> asHTML()を使用できます。

関連する問題