Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript PHP如何用值替换html标记_Javascript_Php_Html_Function_Dynamic - Fatal编程技术网

Javascript PHP如何用值替换html标记

Javascript PHP如何用值替换html标记,javascript,php,html,function,dynamic,Javascript,Php,Html,Function,Dynamic,我在一个文本文件中有数千个静态HTML行,我想保留名为“num”的特定HTML标记之间的“H-number”值,并使用PHP将其转换为链接。例如,HTML字符串如下所示: H7585… 从这里,我想得到零件H7585,并将其转换为这样的东西,保持“H-number”值: .. 但是,所有的“H-number”代码(如H7585)都是不同的,它们不在PHP变量中,因为所有内容都是HTML文本字符串。我已经尝试过PHP函数preg_match和preg_replace,但是我没有找到解决方案 我试过

我在一个文本文件中有数千个静态HTML行,我想保留名为“num”的特定HTML标记之间的“H-number”值,并使用PHP将其转换为链接。例如,HTML字符串如下所示:


H7585…

从这里,我想得到零件
H7585
,并将其转换为这样的东西,保持“H-number”值:


..

但是,所有的“H-number”代码(如
H7585
)都是不同的,它们不在PHP变量中,因为所有内容都是HTML文本字符串。我已经尝试过PHP函数preg_match和preg_replace,但是我没有找到解决方案

我试过的就是这个。但我不知道如何获得不同的H值来显示:

$string='…
H7585……
H72000……
H8525-(尽管有数千行这样的代码,使用不同的H号代码)

$string=preg_replace(“/(.+?)/is“,”,$string)

$echo$string

有人能帮我吗?非常感谢。

您可以通过创建文档、将HTML加载到文档中、使用查找所需的节点,然后用新创建的链接元素替换它们来利用:

$domDocument = new \DOMDocument();
$domDocument->loadHTML(utf8_decode($markup), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD | LIBXML_NOWARNING | LIBXML_NOERROR);
$domDocument->encoding = 'utf-8';

$xpath = new DOMXPath($domDocument);

/** @var DOMElement $numElement */
foreach ($xpath->query('//num') as $numElement) {
  $linkElement = $domDocument->createElement('a');
  $linkElement->setAttribute('href', "https://link-here.php?id={$numElement->textContent}");
  $numElement->parentNode->replaceChild($linkElement, $numElement);
  $linkElement->appendChild($numElement);
}

$newMarkup = $domDocument->saveHTML();
演示:


注意:不建议使用正则表达式来解析XML/HTML。

这是否回答了您的问题?我真的很感谢你的帮助。代码工作得非常完美,这正是我所需要的。我想感谢你抽出时间来帮助我。继续努力!我有个问题。我可以对代码进行哪些更改,以使输出保持带有特殊口音或字符的单词的完整性?@Arlo检查更新的代码(我没有更新演示链接,只是更新了答案中的代码)。更新效果非常棒!所有utf-8字符现在都显示重音。代码工作得很好!我真的很感激。如果字符串还包括希腊字母和其他口音,如Azōr或Ἀζὼρ用什么替代utf-8?
<?php
$str = '</tvm><br><num>H7585</num></td><td><font color="#663399">......</tvm><br><num>H72000</num></td><td><font color="#663399">......</tvm><br><num>H8525</num></td><td><font color="#663399">';
$res = preg_replace('/<num>(.+?)<\/num>/i','<a href="$1"><num>$1<\/num><\/a>', $str);
var_dump($res);