PHP使用strip_tags处理JSON转Excel时保留文件链接的问题咨询
PHP提取HTML中a标签href值导出到CSV的解决方案
问题根源
原有代码存在两个核心问题:
strip_tags第三个参数要求传入字符串格式的允许标签,你传入['<a>']数组格式不符合语法要求,导致部分PHP版本无法正确保留a标签,后续正则匹配失效- 第二条匹配非http/https开头链接的正则,直接返回了a标签的文本内容(也就是你看到的
filename.pdf),没有提取href属性的路径值
方案1:正则快速修复(适配简单场景)
直接自定义处理函数替换原来的array_map逻辑,代码如下:
fputcsv($fh,["title", "field_tags","field_risk_minimization_type","field_drug_class","field_hcpg","field_patient_card","field_risk_1","field_risk_minimization_type_1", "field_tags_1", "field_specialty_theraputic_area_","field_healthcare_provider_checkl","field_dhpc" ]); if (is_array($jsonDecoded)) { foreach ($jsonDecoded as $line) { if (is_array($line)) { // 自定义处理每个字段的函数 $data = array_map(function($content) { // 先保留a标签,这里传入字符串格式的允许标签 $content = strip_tags($content, '<a>'); // 提取所有a标签的href属性值,替换a标签为对应href $content = preg_replace('~<a\s+[^>]*href="([^"]+)"[^>]*>.*?</a>~is', '$1', $content); // 兜底清理剩余可能存在的HTML标签 $content = strip_tags($content); return $content; }, $line); fputcsv($fh,$data); } } } fclose($fh);
如果你的a标签href用单引号包裹,可以把正则里的"换成['"]适配。
方案2:DOMDocument稳定方案(兼容复杂HTML场景)
如果HTML结构不规范,正则容易匹配出错,用PHP内置的DOM解析器更可靠:
fputcsv($fh,["title", "field_tags","field_risk_minimization_type","field_drug_class","field_hcpg","field_patient_card","field_risk_1","field_risk_minimization_type_1", "field_tags_1", "field_specialty_theraputic_area_","field_healthcare_provider_checkl","field_dhpc" ]); if (is_array($jsonDecoded)) { foreach ($jsonDecoded as $line) { if (is_array($line)) { $data = array_map(function($content) { $dom = new DOMDocument(); // 屏蔽HTML不规范的警告 libxml_use_internal_errors(true); $dom->loadHTML('<?xml encoding="UTF-8">' . $content); libxml_clear_errors(); $xpath = new DOMXPath($dom); $links = $xpath->query('//a'); // 替换所有a标签为href值 foreach ($links as $link) { $href = $link->getAttribute('href'); $link->parentNode->replaceChild($dom->createTextNode($href), $link); } // 返回纯文本内容 return trim(strip_tags($dom->saveHTML())); }, $line); fputcsv($fh,$data); } } } fclose($fh);
内容的提问来源于stack exchange,提问作者IDI
相关产品推荐
相关产品推荐

