Điểm:-1

Xem trường văn bản thuần túy gây ra sự cố hiển thị cho bản dịch

lá cờ cn

Phần tin tức của chúng tôi có một trường văn bản thuần túy cho tiêu đề bài viết. Tại thời điểm phát triển, đây có vẻ là một ý tưởng hay, tuy nhiên, sau khi đi vào hoạt động, một số ngôn ngữ như tiếng Pháp có các ký tự đặc biệt hiện đang gây ra sự cố hiển thị, ví dụ:

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

Được hiển thị dưới dạng:

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

Tôi hiểu tại sao điều này lại xảy ra khi các trường văn bản bị "thoát" vì lý do bảo mật. Vấn đề ở đây là một trong những nhận thức muộn màng:

  1. Chúng tôi không thể xóa trường hoặc "chuyển đổi" trường thành văn bản có định dạng vì điều đó sẽ yêu cầu tất cả các ngôn ngữ phải làm lại tất cả các bài viết
  2. Chúng tôi không thể thêm bất kỳ bộ lọc bổ sung nào trong "chế độ xem" vì không có bộ lọc nào cho phép tôi nói "vui lòng cho phép một số ký tự nhất định" vì trong trường hợp này l' được coi là một ký tự thoát trong cơ sở dữ liệu.

Tôi cho rằng tùy chọn duy nhất của mình là thử và ghi đè giá trị trong tệp twig của mình: (lượt xem-khung-trường--news.html.twig):

<div class="col-md-4">
    <div class="card newscard"> {{ fields.field_summary_image.content }}
        <div class="card-body">
            <h5 class="card-title">
                <a href="{{ fields.view_node.content|render|striptags|trim }}">{{ fields.field_article_title.content|render|striptags }}</a>
            </h5>
            <p>{{ fields.created.content|render|striptags|trim }}</p>
        </div>
    </div>
</div>

Tuy nhiên, tôi đã cố gắng lấy giá trị thô nhưng không thể lấy giá trị thô vì đây là "trường" được hiển thị (hiển thị HTML gói cùng với nội dung).

Tôi cũng đã thử chuyển nó sang chế độ xem chưa định dạng (views-view-unformatted--news.html.twig):

<div class="card-deck" id="ajaxnewscontainer">
    {% for row in rows %}
        <div class="col-md-4">
            <div class="card newscard"> {{ fields.field_summary_image.content }}
                <div class="card-body">
                    <h5 class="card-title">
                        <a href="{{ fields.view_node.content|render|striptags|trim }}">{{ fields.field_article_title.content|render|striptags }}</a>
                    </h5>
                    <p>{{ fields.created.content|render|striptags|trim }}</p>
                </div>
            </div>
        </div>
    {% endfor %}
</div>

Tuy nhiên, trong trường hợp này, tôi không nhận được bất kỳ giá trị nào vì thực hiện {{ dump(row) }} khiến 32GB RAM của tôi trở nên vô dụng nên không thể xác định cách lấy các phần tử mảng "hàng" để tôi có thể hy vọng nhận được " raw" của các trường.field_article_title.content|render|striptags

Bất kỳ ý tưởng?

lá cờ cn
Tôi khuyên bạn nên chống lại cách tiếp cận này, nó không bao giờ kết thúc tốt đẹp. Thay vào đó, hãy thêm một trường được định dạng mới và viết một hook cập nhật để chuyển nội dung từ trường cũ sang trường mới.
sonfd avatar
lá cờ in
Tại sao bạn kết xuất bằng `|render|striptags|trim`? Afaik, điều đó sẽ luôn khiến bạn thấy các thực thể html được mã hóa.
4uk4 avatar
lá cờ cn
Nhưng tại sao lại sử dụng `'` ngay từ đầu? Nhập dấu nháy đơn bằng bàn phím của bạn. Có nhiều trường văn bản thuần túy trong Drupal được dịch, nổi bật nhất là các nhãn thực thể.
4uk4 avatar
lá cờ cn
@sonfd Vâng, đây có thể là vấn đề. Nó không như tôi nghi ngờ. Bản dịch chứa dấu nháy đơn dưới dạng ký tự ASCII. Bản dịch này được chuyển đổi thành thực thể HTML bằng bộ lọc XSS mặc định được áp dụng cho tất cả các trường văn bản thuần túy và sau đó nó được thoát lần thứ hai bởi bộ lọc Twig này.
4uk4 avatar
lá cờ cn
Vì vậy, các trường văn bản thuần túy được dịch thông thường không gây ra bất kỳ sự cố nào.
mauzilla avatar
lá cờ cn
Nếu không có |render, trường sẽ trống.
Điểm:2
lá cờ in

Tôi không nghĩ điều này có liên quan gì đến các bản dịch ngoài bản dịch của bạn là phiên bản của nút tình cờ có dấu nháy đơn trong trường này.

Vấn đề là do bạn đang kết xuất trường của mình với |render|striptags|cắt Thích:

{{field.created.content|render|striptags|trim }}

Điều này sẽ luôn gây ra sự cố khi hiển thị các thực thể html được mã hóa.

Từ @4uk4 trong một bình luận ở trên:

Bản dịch chứa dấu nháy đơn dưới dạng ký tự ASCII, ký tự này được chuyển đổi thành thực thể HTML bằng bộ lọc XSS mặc định được áp dụng cho tất cả các trường văn bản thuần túy và sau đó nó được thoát lần thứ hai bởi bộ lọc Twig này.

Để giải quyết, hãy hiển thị trường của bạn mà không sử dụng |render|striptags|cắt, tức là chỉ cần sử dụng:

{{field.created.content}}
mauzilla avatar
lá cờ cn
Không có |render thì kết quả trống
sonfd avatar
lá cờ in
Bạn đang sử dụng `{{field.created.content }}` hay `{{field.created.content|striptags|trim }}`. Cái sau sẽ không 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.