内联 JSON-LD 脚本块中的动态值

sli*_*ass 5 dynamic json-ld

我将数据存储在我选择并在我的 html 页面上回显的数据库中,如下所示:

 <article id="content_left_article_1">
      <h1 class="main-heading">Get in Touch</h1>
      <P><?php echo $rs_contactRows['ContactJobTitle']; ?>: <?php echo $rs_contactRows['ContactName']; ?></P>
      <P>Email: <?php echo $rs_contactRows['ContactEmail']; ?></P>
      <P>Mobile: <?php echo $rs_contactRows['ContactTelephone']; ?></P>
 </article>
Run Code Online (Sandbox Code Playgroud)

我知道我可以在页面上的单独脚本块中使用 JSON-LD 轻松标记此人的数据,如下所示:

<script type='application/ld+json'> 
    {
      "@context": "http://www.schema.org",
      "@type": "person",
      "name": "Brian Keet",
      "jobTitle": "Director",
      "url": "http://tekiahfoundation.blogspot.co.za/",
      "email": "briankeet@yahoo.com",
      "telephone": "+27766261024"
    }
    </script>
Run Code Online (Sandbox Code Playgroud)

但是,如果客户端要更新数据库中的任何这些详细信息(他们肯定会通过站点 CMS 进行更新),上面的静态 JSON-LD 脚本块将保持......好吧,静态。我一直在谷歌搜索和堆栈溢出像发疯一样试图找到关于如何在 JSON-LD 脚本块中拥有动态值的答案,

<script type='application/ld+json'> 
    {
      "@context": "http://www.schema.org",
      "@type": "person",
      "name": "$user.name + $user.surname",
    }
    </script>
Run Code Online (Sandbox Code Playgroud)

或其他一些方法,通过谷歌的结构化数据测试工具检查。

我一直在试图弄清楚如何使用 json_encoded($dataObject),我在 php 中使用了下面的 mysqli_query() 等(见下面的代码),并且可能用 javascript 创建一个 JSON-LD 脚本块,但我我不太确定这将如何工作。我也知道显然“即使通过 Javascript 代码或嵌入的“小部件”动态注入到页面内容中,Google 也可以读取 JSON-LD 数据”。另外,如果我回应 json_encoded mysqli_fetch_assoc 的结果:

<?php
   require('inc-conncvnl.php');
   require('inc-function-escapestring.php');
   $sql_contact = sprintf("SELECT * FROM tblcontact");
   $rs_contact = mysqli_query($vconncvnl, $sql_contact);
   $rs_contactRows = mysqli_fetch_assoc($rs_contact);
   $contactData = json_encode($rs_contactRows);
  echo $contactData;
?>
Run Code Online (Sandbox Code Playgroud)

我得到页面上的数据回显,如下所示:json-encode echo on web

我很确定我错过了这个拼图的一些重要部分。如果有人能帮我找出解决这个问题的成功方法,我将不胜感激。

Mar*_*ler 5

您可以只在 PHP 中输​​出 JSON-LD,如下所示:

<script type="application/ld+json"> 
{
  "@context": "http://schema.org/",
  "@type": "Person",
  "name": "<?php echo htmlentities($rs_contactRows['ContactName'], ENT_QUOTES); ?>",
  "jobTitle": "<?php echo htmlentities($rs_contactRows['ContactJobTitle'], ENT_QUOTES); ?>",
  "url": "<?php echo htmlentities($rs_contactRows['ContactUrl'], ENT_QUOTES); ?>",
  "email": "<?php echo htmlentities($rs_contactRows['ContactEmail'], ENT_QUOTES); ?>",
  "telephone": "<?php echo htmlentities($rs_contactRows['ContactTelephone'], ENT_QUOTES); ?>"
}
</script>
Run Code Online (Sandbox Code Playgroud)

或者您在 PHP 中创建 JSON-LD 并输出:

$data = array(
  '@context' => 'http://schema.org/',
  '@type' => 'Person',
  'name' => $rs_contactRows['ContactName'],
  'jobTitle' => $rs_contactRows['ContactJobTitle'],
  'url' => $rs_contactRows['ContactUrl'],
  'email' => $rs_contactRows['ContactEmail'],
  'telephone' => $rs_contactRows['ContactTelephone']
);
echo json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
Run Code Online (Sandbox Code Playgroud)

旁注:您应该htmlentities在输出 HTML 时始终使用,否则您将面临XSS 安全漏洞的风险。