Score:1

ส่งออกสตริง JSON ไปยังไฟล์ PHPTemplate

ธง in

ฉันต้องการส่งออกสตริง JSON โดยเป็นส่วนหนึ่งของแอตทริบิวต์ข้อมูลบนแท็ก HTML สำหรับเทมเพลตใน Drupal 7 ตลอดชีวิตของฉัน ฉันคิดไม่ออกว่าทำไมมันถึงใช้งานไม่ได้ (ทำงานได้อย่างสมบูรณ์แบบใน 8+)

ฉันต้องการรายการชุดของ URL รูปภาพและขนาดสื่อซึ่งแยกวิเคราะห์โดย Javascript ในภายหลัง

ใน template.php:

    $variables['background_images'] = [];

    $variables['background_images'][] = [
      'srcset' => 'https://placeimg.com/1600/600/tech, https://placeimg.com/3200/1200',
      'สื่อ' => '(ความกว้างต่ำสุด: 100rem)',
    ];

    $variables['background_images'][] = [
      'srcset' => 'https://placeimg.com/1600/600/tech, https://placeimg.com/3200/1200',
      'สื่อ' => '(ความกว้างต่ำสุด: 48rem)',
    ];

    $variables['background_images'] = json_encode($variables['background_images']);

ในไฟล์ tpl:

<div data-background="<?php print $background_images; ?>"></div>

ผลลัพธ์คือปัญหามากมายในเบราว์เซอร์ URL เป็นอักขระหลีก และมีเครื่องหมายคำพูดซ้ำซ้อนมากกว่าที่ฉันป้อนมาก:

data-background="[{" srcset":"https:\="" \="" placeimg.com\="" 1600\="" 600\="" เทคโนโลยี,="" https:\="" 3200\="" 1200","media":"(ความกว้างต่ำสุด:="" 100rem)"},{"srcset":"https:\="" 48rem)"}]"

ฉันไม่สามารถเข้าใจได้ว่าเหตุใดจึงมีการเว้นวรรคพิเศษบนปุ่มหรือเหตุใดจึงหลุดออกไปก่อนกำหนดและทำให้ส่วนที่เหลือเสียหายมันดูถูกต้อง (สำหรับฉัน) ด้วย xdebug แต่เมื่อพิมพ์ไปยังเบราว์เซอร์มันผิด

วิธีที่สองที่ฉันได้ลอง (สร้างข้อมูลตัวอย่าง):

    $รายการ = [];

    สำหรับ ($x = 0; $x < 3; $x++) {
      $รายการ[$x] = [
        'srcset' => 'https://placeimg.com/1600/600/tech, https://placeimg.com/3200/1200',
        'สื่อ' => '(ความกว้างต่ำสุด: 100rem)',
      ];
    }

    $variables['background_images'] = drupal_json_encode($items);

ป้อนคำอธิบายรูปภาพที่นี่

cn flag
ลองใช้ `json_encode($variables['background_images'], JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT)` แทน
cn flag
ที่จริงแค่ลอง `drupal_json_encode($variables['background_images'])` มันก็ทำเหมือนกันแต่ตัวอักษรน้อยกว่า
Kevin avatar
in flag
ลองแล้วได้ผลเหมือนกัน (หนีสุดและผิดรูป)
Kevin avatar
in flag
ดูเหมือนว่าจะสำลักในส่วนนี้: (ความกว้างต่ำสุด: 48rem)
Score:0
ธง cn

เป็นเครื่องหมายอัญประกาศคู่ที่ทำให้เกิดปัญหา ไม่ว่าจะเข้ารหัสไว้หรือไม่ก็ตาม JSON_HEX_QUOT หรือไม่. พวกเขาต้องสับสนกับ parser หรือบางอย่างในไปป์ไลน์การเรนเดอร์

โชคดีที่มันแก้ไขได้ง่าย เพียงใช้เครื่องหมายคำพูดเดี่ยวสำหรับแอตทริบิวต์ HTML:

<div data-background='<?php print $background_images; ?>'></div>

ปัญหาเดียวกันนี้จะไม่เกิดขึ้นกับ single quotes ตราบเท่าที่คุณใช้ drupal_json_encode ค่อนข้างมากกว่า json_encode (หรือ json_encode กับ JSON_HEX_APOS ธง). ดังนั้นหากสตริงของคุณมีเครื่องหมายอัญประกาศเดี่ยวในอนาคต สิ่งนี้จะยังคงใช้ได้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา