php html 标签转换为字符串
php html tags converted to string
我正在尝试将带有 php 的 HTML 文件作为 DOM 文档处理。处理没问题,但是当我用 $html->saveHTMLFile("file_out.html"); 保存 html 文档时所有 link 标签都转换自:
Click here: <a title="editable" href="http://somewhere.net">somewhere.net</a>
到
Click here: <a title="editable" href="http://somewhere.net"> somewhere.net </a>
我将 link 处理为 php 脚本,也许这会有所不同?
我无法使用 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" 中获取输入数据。接下来我打开文件,通过 id 识别 html 元素并将其内容 (a link) 替换为来自文本区域的输入数据。我只在 textarea 中提供 href,脚本从中构建 hyperlink。接下来,我将其重新插入原始文件并覆盖输入文件。
当我写入新文件时,link <a href= ...> </a>
被转换为 <a href=...> </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);
}
?>
您正在做的是将您的新锚点 (a) 标记作为字符串传递,然后从中创建一个文本节点(文本就是文本,而不是 HTML)。 createTextNode 函数自动对任何 HTML 标签进行编码,以便它们在浏览器中显示为文本(如果您愿意,您可以将 HTML 作为可见代码显示在您的页面上)。
您需要做的是将元素创建为 HTML(不是文本节点),然后附加它:
<?php
function setInnerHTML($DOM, $element, $innerHTML) {
$f = $DOM->createDocumentFragment();
$f->appendXML($innerHTML);
$element->appendChild($f);
}
?>
我正在尝试将带有 php 的 HTML 文件作为 DOM 文档处理。处理没问题,但是当我用 $html->saveHTMLFile("file_out.html"); 保存 html 文档时所有 link 标签都转换自:
Click here: <a title="editable" href="http://somewhere.net">somewhere.net</a>
到
Click here: <a title="editable" href="http://somewhere.net"> somewhere.net </a>
我将 link 处理为 php 脚本,也许这会有所不同?
我无法使用 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" 中获取输入数据。接下来我打开文件,通过 id 识别 html 元素并将其内容 (a link) 替换为来自文本区域的输入数据。我只在 textarea 中提供 href,脚本从中构建 hyperlink。接下来,我将其重新插入原始文件并覆盖输入文件。
当我写入新文件时,link <a href= ...> </a>
被转换为 <a href=...> </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);
}
?>
您正在做的是将您的新锚点 (a) 标记作为字符串传递,然后从中创建一个文本节点(文本就是文本,而不是 HTML)。 createTextNode 函数自动对任何 HTML 标签进行编码,以便它们在浏览器中显示为文本(如果您愿意,您可以将 HTML 作为可见代码显示在您的页面上)。
您需要做的是将元素创建为 HTML(不是文本节点),然后附加它:
<?php
function setInnerHTML($DOM, $element, $innerHTML) {
$f = $DOM->createDocumentFragment();
$f->appendXML($innerHTML);
$element->appendChild($f);
}
?>