2016-07-11 12 views
0

phpを使用してHTMLファイルをDOMドキュメントとして処理しようとしています。処理は大丈夫ですが、$ html-> saveHTMLFile( "file_out.html")でhtmlドキュメントを保存すると、すべてのリンクタグがから変換されています。私はPHPスクリプトとしてリンクを処理php htmlタグを文字列に変換しました

Click here: <a title="editable" href="http://somewhere.net"> somewhere.net </a> 

Click here: <a title="editable" href="http://somewhere.net">somewhere.net</a> 

、多分これは違いを作りますか? &lt;をhtmlentitites_decode()などで<に戻すことはできません。私が使用できる他の変換やエンコーディングはありますか?

PHPスクリプトは、次のようになります。

<?php 
$text = $_POST["textareaX"]; 
$id = $_GET["id"]; 
$ref = $_GET["ref"]; 
$html = new DOMDocument(); 
$html->preserveWhiteSpace = true; 
$html->formatOutput  = false; 
$html->substituteEntities = false; 
$html->loadHTMLFile($ref.".html"); 
$elem = $html->getElementById($id); 
$elem->nodeValue = $innerHTML; 

if ($text == "") 
    { $text = "--- No details. ---"; } 
$newtext = ""; 
$words = explode(" ",$text); 
foreach ($words as $word) { 
    if (strpos($word, "http://") !== false) { 
    $newtext .= "<a alt=\"editable\" href=\"".$word."\">".$word."</a>"; 
    } 
    else {$newtext .= $word." ";} 
} 

$text = $newtext; 

function setInnerHTML($DOM, $element, $innerHTML) { 
    $node = $DOM->createTextNode($innerHTML); 
    $children = $element->childNodes; 
    foreach ($children as $child) { 
    $element->removeChild($child); 
    } 
    $element->appendChild($node); 
} 

setInnerHTML($html, $elem, $text); 
$html->saveHTMLFile($ref.".html"); 
header('Location: '."tracking.php?ref=$ref&user=unLock"); 
?> 

私たちは、「ID」と「REF」とアレイ「textareaX」からの入力データからファイルへの参照を取得します。次に、ファイルを開き、html要素をidで識別し、その内容(リンク)をテキストエリアの入力データで置き換えます。私はテキストエリアのhrefだけを提供し、スクリプトはそのテキストからハイパーリンクを作成します。次に、これを元のファイルにプラグインして、入力ファイルを上書きします。

新しいファイルを書き込むと、<a href= ...> </a>のリンクが&lt;a href=...&gt; &lt;/a&gt;に変換されるという問題があります。ここで

+2

を同じコードwiorks私のために:あなたがする必要がどのような

は、それを追加HTML(ないテキストノード)としての要素を作成することです。 私は '$ html = new DOMDocument();を使っています。 $ html-> loadHTMLFile( "file_in.html"); $ html-> preserveWhiteSpace = true; $ html-> formatOutput = true; $ html-> saveHTMLFile( "file_out.html"); ' – Jagadeesh

+0

こんにちは@ジャック!たぶん私は十分な情報を提供していないかもしれません。私は自分の質問を編集し、スクリプト全体を追加しました。問題は解決しません。 –

答えて

1

は問題識別を使用してコードの一部です:そして、それのうちテキストノードを作成し、文字列として、新しいアンカー(a)のタグを渡して何をやっている

<?php 

function setInnerHTML($DOM, $element, $innerHTML) { 
    /********************************* 
     Well, there's your problem: 
    **********************************/ 
    $node = $DOM->createTextNode($innerHTML); 
    $children = $element->childNodes; 
    foreach ($children as $child) { 
    $element->removeChild($child); 
    } 
    $element->appendChild($node); 
} 

?> 

(テキストだけですそれはHTMLではなくテキストです)。 createTextNode関数は、すべてのHTMLタグを自動的にエンコードし、ブラウザで表示したときにテキストとして表示されるようにします(これにより、HTMLをページ上に表示することができます)。

<?php 

function setInnerHTML($DOM, $element, $innerHTML) { 

    $f = $DOM->createDocumentFragment(); 
    $f->appendXML($innerHTML); 
    $element->appendChild($f); 

} 

?> 
+0

ありがとうジム!!できます!私はこの違いについて知らなかった。私は学ぶ必要があります... –

+0

問題はありません、私は助けることができてうれしい – Jim

関連する問題