通过 PHP 在 html 中添加属性标签
Adding attr tag in html via PHP
我想在我的 HTML 对象中添加另一个 属性 和值,
但相反,它正在替换当前值。
这是我目前在 PHP 文件中编写的代码。
function htmlEncode ( $html ){
$html = preg_replace('~>\s+<~', '><', $html);
$html = html_entity_decode($html);
$dom = new DOMDocument();
$dom->loadHTML($html);
foreach($dom->getElementsByTagName('*') as $div){
foreach ($div->attributes as $attr) {
if($div->nodeName == "h2"){
$class = $attr->nodeName;
$className = $attr->nodeValue;
$div->setAttribute("aria-label", $div->nodeValue);
$result = [
"tagName" => $div->nodeName,
"value" => $div->nodeValue,
$class=> $className,
$attr->nodeName => $attr->nodeValue
];
} else {
$result[] = [
"tagName" => $div->nodeName,
"value" => $div->nodeValue,
$attr->nodeName => $attr->nodeValue
];
}
}
}
$json = json_encode($result, JSON_UNESCAPED_UNICODE);
return $json;
}
但是当我运行代码
echo json_encode($attr->nodeName);
我得到两个属性:
"class" "aria-label"
尝试添加新行
$div->setAttribute("class", $div->nodeValue);
$div->setAttribute("aria-label", $div->nodeValue);
试试下面的代码。
完成的更改:
1. $class[] = array();
2. $class[$attr->nodeName] = $attr->nodeValue;
3. Removed `class` from results
4. Added
foreach($class as $key=>$classValues){
if(!empty($classValues)){
$result[$key] = $classValues;
}
}
完整代码:
function htmlEncode ( $html ){
$html = preg_replace('~>\s+<~', '><', $html);
$html = html_entity_decode($html);
$dom = new DOMDocument();
$dom->loadHTML($html);
foreach($dom->getElementsByTagName('*') as $div){
$class[] = array();
foreach ($div->attributes as $attr) {
if($div->nodeName == "h2"){
$class[$attr->nodeName] = $attr->nodeValue;
$div->setAttribute("aria-label", $div->nodeValue);
$result = [
"tagName" => $div->nodeName,
"value" => $div->nodeValue,
$attr->nodeName => $attr->nodeValue
];
foreach($class as $key=>$classValues){
if(!empty($classValues)){
$result[$key] = $classValues;
}
}
} else {
$result[] = [
"tagName" => $div->nodeName,
"value" => $div->nodeValue,
$attr->nodeName => $attr->nodeValue
];
}
}
}
$json = json_encode($result, JSON_UNESCAPED_UNICODE);
return $json;
}
我想在我的 HTML 对象中添加另一个 属性 和值, 但相反,它正在替换当前值。
这是我目前在 PHP 文件中编写的代码。
function htmlEncode ( $html ){
$html = preg_replace('~>\s+<~', '><', $html);
$html = html_entity_decode($html);
$dom = new DOMDocument();
$dom->loadHTML($html);
foreach($dom->getElementsByTagName('*') as $div){
foreach ($div->attributes as $attr) {
if($div->nodeName == "h2"){
$class = $attr->nodeName;
$className = $attr->nodeValue;
$div->setAttribute("aria-label", $div->nodeValue);
$result = [
"tagName" => $div->nodeName,
"value" => $div->nodeValue,
$class=> $className,
$attr->nodeName => $attr->nodeValue
];
} else {
$result[] = [
"tagName" => $div->nodeName,
"value" => $div->nodeValue,
$attr->nodeName => $attr->nodeValue
];
}
}
}
$json = json_encode($result, JSON_UNESCAPED_UNICODE);
return $json;
}
但是当我运行代码
echo json_encode($attr->nodeName);
我得到两个属性:
"class" "aria-label"
尝试添加新行
$div->setAttribute("class", $div->nodeValue);
$div->setAttribute("aria-label", $div->nodeValue);
试试下面的代码。 完成的更改:
1. $class[] = array();
2. $class[$attr->nodeName] = $attr->nodeValue;
3. Removed `class` from results
4. Added
foreach($class as $key=>$classValues){
if(!empty($classValues)){
$result[$key] = $classValues;
}
}
完整代码:
function htmlEncode ( $html ){
$html = preg_replace('~>\s+<~', '><', $html);
$html = html_entity_decode($html);
$dom = new DOMDocument();
$dom->loadHTML($html);
foreach($dom->getElementsByTagName('*') as $div){
$class[] = array();
foreach ($div->attributes as $attr) {
if($div->nodeName == "h2"){
$class[$attr->nodeName] = $attr->nodeValue;
$div->setAttribute("aria-label", $div->nodeValue);
$result = [
"tagName" => $div->nodeName,
"value" => $div->nodeValue,
$attr->nodeName => $attr->nodeValue
];
foreach($class as $key=>$classValues){
if(!empty($classValues)){
$result[$key] = $classValues;
}
}
} else {
$result[] = [
"tagName" => $div->nodeName,
"value" => $div->nodeValue,
$attr->nodeName => $attr->nodeValue
];
}
}
}
$json = json_encode($result, JSON_UNESCAPED_UNICODE);
return $json;
}