Điểm:1

Xuất chuỗi JSON thành tệp PHPTemplate

lá cờ in

Tôi muốn xuất một chuỗi JSON như một phần của thuộc tính dữ liệu trên thẻ HTML cho một mẫu trong Drupal 7. Đối với tôi, tôi không thể hiểu tại sao nó không hoạt động (hoạt động hoàn hảo trong 8+).

Tôi cần liệt kê một tập hợp các url hình ảnh và kích thước phương tiện sẽ được Javascript phân tích cú pháp sau này.

Trong mẫu.php:

    $variables['background_images'] = [];

    $variables['background_images'][] = [
      'srcset' => 'https://placeimg.com/1600/600/tech, https://placeimg.com/3200/1200',
      'phương tiện' => '(độ rộng tối thiểu: 100rem)',
    ];

    $variables['background_images'][] = [
      'srcset' => 'https://placeimg.com/1600/600/tech, https://placeimg.com/3200/1200',
      'phương tiện' => '(độ rộng tối thiểu: 48rem)',
    ];

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

Trong tệp tpl:

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

Đầu ra là một loạt các vấn đề trong trình duyệt. Các URL được thoát và có nhiều dấu ngoặc kép hơn tôi đã nhập:

data-background="[{" srcset":"https:\="" \="" placeimg.com\="" 1600\="" 600\="" tech,="" https:\="" 3200\="" 1200","media":"(min-width:="" 100rem)"},{"srcset":"https:\="" 48rem)"}]"

Tôi không thể hiểu tại sao lại có một khoảng cách thừa trên các phím hoặc tại sao nó thoát ra sớm và phá vỡ phần còn lại của nó.Nó có vẻ đúng (với tôi) với xdebug, nhưng khi nó được in ra trình duyệt thì nó sai.

Cách thứ hai tôi cũng đã thử (tạo dữ liệu mẫu):

    $items = [];

    cho ($x = 0; $x < 3; $x++) {
      $items[$x] = [
        'srcset' => 'https://placeimg.com/1600/600/tech, https://placeimg.com/3200/1200',
        'phương tiện' => '(độ rộng tối thiểu: 100rem)',
      ];
    }

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

nhập mô tả hình ảnh ở đây

lá cờ cn
Thay vào đó, hãy thử `json_encode($variables['background_images'], JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT)`
lá cờ cn
Trên thực tế, chỉ cần thử `drupal_json_encode($variables['background_images'])`, nó cũng làm như vậy nhưng ít ký tự hơn
Kevin avatar
lá cờ in
Đã thử điều đó, kết quả tương tự (siêu thoát và không đúng định dạng).
Kevin avatar
lá cờ in
đoạn này hình như nó bị nghẹt :((min-width:48rem)
Điểm:0
lá cờ cn

Đó là dấu ngoặc kép đang gây ra sự cố, cho dù chúng đã được mã hóa bằng JSON_HEX_QUOT hay không. Họ phải nhầm lẫn một trình phân tích cú pháp hoặc một cái gì đó ở đâu đó trong đường dẫn kết xuất.

May mắn thay, đây là một cách khắc phục dễ dàng, chỉ cần sử dụng dấu nháy đơn cho thuộc tính HTML:

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

Vấn đề tương tự không xảy ra đối với các trích dẫn đơn, miễn là bạn sử dụng drupal_json_encode còn hơn là json_encode (hoặc json_encode với JSON_HEX_APOS lá cờ). Vì vậy, nếu các chuỗi của bạn bao gồm các dấu ngoặc đơn trong tương lai thì điều này sẽ vẫn hoạt động.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.