调用Lever API获取职位数据时预格式化HTML格式丢失问题
问题根因
你遇到的HTML格式完全丢失问题和前端渲染、PHP转义逻辑无关,核心是Lever Postings接口的默认返回规则导致的:
- 调用
https://api.lever.co/v1/postings接口时如果不追加特殊参数,接口会自动剥离所有职位描述里的HTML标签,content.description字段只返回无格式的纯文本内容,所有加粗、列表、下划线样式都会被清除,最终渲染就是连续的纯文本。 - 只有在请求时携带
mode=xml参数,接口才会返回保留原始HTML格式的富文本职位内容,这个参数名虽然带xml标识,但实际返回的仍然是JSON结构数据,只是内容字段保留了HTML标签。
修复方案
按以下步骤修改代码即可:
- 修改接口请求地址,追加富文本返回参数
把原有代码里的请求URL替换为带参数的版本,修改片段如下:// 原地址:$url = "https://api.lever.co/v1/postings"; // 替换为带mode参数的地址,要求接口返回富文本内容 $url = "https://api.lever.co/v1/postings?mode=xml"; $curl = curl_init($url); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_VERBOSE, true); $headers = array( "Authorization: Basic apikeyherebutIhidit", ); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); $resp = curl_exec($curl); curl_close($curl); $jr = json_decode($resp, true); $jrlen = count($jr['data']); - 匹配富文本字段渲染
追加参数后先打印单条职位的返回结构确认字段:部分API版本下富文本描述字段为content.descriptionHtml,如果原有content.description仍为纯文本,把渲染代码里的对应字段替换即可,示例修改片段:// 原代码:'<div class="job-description">' . $jr['data'][$x]['content']['description'] . '</div>' // 替换为富文本字段 '<div class="job-description">' . $jr['data'][$x]['content']['descriptionHtml'] . '</div>' - (可选安全加固)由于职位内容来自第三方平台,直接输出HTML存在XSS注入风险,建议接入
HTMLPurifier类库配置白名单,只保留业务需要的安全标签(<p>、<br>、<strong>、<u>、<ul>、<li>、<ol>等),过滤掉脚本、iframe等危险标签后再输出到页面。
内容的提问来源于stack exchange,提问作者Loizos Aristeidis
相关产品推荐
相关产品推荐

