2016-10-25 7 views
0

DOMDocumentを使用してテキストをHTMLとしてロードして処理しています。DOMDocument loadHtmlを使用して正確な入力値をロードする方法

私は問題のカップルがあります

などとしてすぐに私はloadHtml(value)メソッドを使用して入力文字列をロードするように、それは<html><body>のように複数のタグを追加することに気づい: (1)あなたが使用してテキストをロードする場合loadHTML(value)を呼び出すと、自動的に終了タグが追加されます。それを避ける方法はありますか? DOMDocumentが終了タグを追加しないようにするにはどうすればよいですか?

$value = "Hi there ! <my-custom-tag>"; 
$doc = new DOMDocument('1.0', 'UTF-8'); 
// Load HTML 
$doc->loadHTML($value); 
error_log(" value after loading in html dom - ". $doc->saveHTML()); 

出力:最後の文以下のようにerror_logにプリント:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html><body><p>Hi there ! <my-custom-tag></my-custom-tag></p></body></html> 

(2)私は括弧のようなURL&lsaquoでテキストを読み込むためにloadHTMLメソッドを使用します。 http://stackoverflow.com&rsaquo; //の後の文字列を取り除くだけです。 DOMDocumentをUrlでそのようなカスタムタグを保持する方法は?

$value = "Hi there ! <http://something.com>"; 
$doc = new DOMDocument('1.0', 'UTF-8'); 
// Load HTML 
$doc->loadHTML($value); 
error_log(" value after loading in html dom - ". $doc->saveHTML()); 

出力:以下のように最後の文のerror_logにプリント:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html><body><p>Hi there ! <http:></http:></p></body></html> 
+0

のような正規表現演算子を使用する方が理にかなっていますその名前が示すように、 'loadHTML'はHTMLを取得することを想定しています。 HTMLを渡すことができない場合は、それを解析するために他の方法を見つける必要があります。 – miken32

答えて

0

あなたが本当にDOMを使用する必要がありますか?

あなたがHTMLを供給し、DOMを使用する必要がある場合は、あなたが行うことで、あなたのタグを取得することができます:

$doc->getElementsByTagName('my-custom-tag');  

を、それが文字列だ場合、それは

$str = 'Hello <my-tag>info</my-tag>'; 

    preg_match("'<my-tag>(.*?)</my-tag>'si", $str, $match); 

    echo $match[1]; 
+0

残念ながら、DOMを使用する必要があります。私が理解しようとしているのは、(1)DOMが入力HTMLタグの終了タグを強制する理由は、コンストラクタでそれを止める方法はありますか?少なくとも私はこれまでのところ方法を見つけることができませんでした。 (2)完全なURLをタグ<'http:/xxxx.com'>として受け入れることができないのはなぜですか?タグからxxxx.comを取り除き、とします。 – Andy

関連する問題