簡體   English   中英

JSON-LD 和內容中的引號

[英]JSON-LD and quotes in the content

我在通過 Google 結構化數據測試工具驗證 JSON-LD 代碼時遇到問題。 我的文章文本取自 MySQL 數據庫,並通過 php 腳本按照以下幾行放入 JSON-LD 結構:

<script type="application/ld+json">
{
    "@context": "http://schema.org",
    "@type": "Article",
    ...
    "articleBody": "<?php echo article content here ?>",
    ...
}

問題是如果文章文本包含引號 (") 那么它們與 JSON-LD 塊語法沖突並導致驗證錯誤。基本上文章內容中 (") 的第一個實例表示文章正文的結尾和下一個 ( ") 導致語法錯誤。

我唯一的想法是用 php 預處理文章內容並刪除 (") 符號。這很好用,但看起來很人為:

    "articleBody": "<?php echo str_replace( '"', '', article content here) ?>",

有沒有可用的標准解決方法?

謝謝你。 我最終得到了以下腳本,它工作得很好:

"articleBody": "<?php echo preg_replace( '/\s+/', ' ', str_replace( '"', '\"', wp_strip_all_tags( get_the_content() ) ) ) ?>",

正如 essexboyracer 已經說過的,您正在尋找函數addslashes()

https://www.php.net/manual/en/function.addslashes.php

返回一個在需要轉義的字符之前添加反斜杠的字符串。 這些字符是:

單引號 (') 雙引號 (") 反斜杠 () NUL(NUL 字節)

由於您正在嘗試輸出 JSON,我建議您改用json_encode ,這應該更直接,並且不太可能被破壞。

<script type="application/ld+json"><?=json_encode([
    "@context" => "http://schema.org",
    "@type" => "Article",
    "articleBody" => $articleBody,
    ...
])?></script>

結果將是:

<script type="application/ld+json">{"@context":"http:\/\/schema.org","@type":"Article","articleBody":"Your article body"}</script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM