[英]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.