Score:-1

ดูฟิลด์ข้อความธรรมดาที่ทำให้เกิดปัญหาในการแสดงผลสำหรับการแปล

ธง cn

ส่วนข่าวของเรามีช่องข้อความธรรมดาสำหรับส่วนหัวของบทความ ในช่วงเวลาของการพัฒนา สิ่งนี้ดูเหมือนจะเป็นความคิดที่ดี อย่างไรก็ตาม เมื่อมีการเผยแพร่ ภาษาบางภาษา เช่น ภาษาฝรั่งเศส มีอักขระพิเศษ ซึ่งขณะนี้ทำให้เกิดปัญหาในการแสดงผล ดังตัวอย่าง:

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

แสดงผลเป็น:

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

ฉันเข้าใจว่าทำไมสิ่งนี้จึงเกิดขึ้นเนื่องจากช่องข้อความถูก "ยกเว้น" ด้วยเหตุผลด้านความปลอดภัย ปัญหาที่นี่คือหนึ่งในความเข้าใจเบื้องหลัง:

  1. เราไม่สามารถลบฟิลด์หรือ "แปลง" ฟิลด์เป็นข้อความที่จัดรูปแบบได้ เนื่องจากต้องใช้ทุกภาษาในการทำซ้ำบทความทั้งหมด
  2. เราไม่สามารถเพิ่มตัวกรองเพิ่มเติมใน "มุมมอง" เนื่องจากไม่มีตัวกรองที่อนุญาตให้ฉันพูดว่า "โปรดอนุญาตอักขระบางตัว" เนื่องจากในกรณีนี้ l' ถือเป็นอักขระหลีกในฐานข้อมูล

ฉันถือว่าตัวเลือกเดียวของฉันคือพยายามแทนที่ค่าในไฟล์ twig ของฉัน: (views-view-fields--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>

อย่างไรก็ตามฉันได้พยายามรับค่าดิบ แต่ไม่สามารถรับค่าดิบได้เนื่องจากเป็น "ฟิลด์" ที่แสดงผล (ซึ่งแสดงการรวม HTML พร้อมกับเนื้อหา)

ฉันได้พยายามย้ายสิ่งนี้ไปยังมุมมองที่ไม่ได้จัดรูปแบบด้วย (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>

อย่างไรก็ตาม ในสถานการณ์นี้ ฉันไม่ได้รับค่าใด ๆ เนื่องจากการทำ {{ dump(row) }} ทำให้ RAM ขนาด 32GB ของฉันไร้ประโยชน์ ดังนั้นจึงไม่สามารถระบุวิธีรับองค์ประกอบอาร์เรย์ "แถว" เพื่อที่ฉันจะได้รับ " ดิบ" ค่าของ field.field_article_title.content|render|striptags

ความคิดใด ๆ ?

cn flag
ฉันขอแนะนำแนวทางนี้ มันไม่จบลงด้วยดี ให้เพิ่มฟิลด์ที่จัดรูปแบบใหม่แทน และเขียน hook อัปเดตซึ่งจะถ่ายโอนเนื้อหาจากเก่าไปยังใหม่
sonfd avatar
in flag
เหตุใดคุณจึงแสดงผลด้วย `|render|striptags|trim` Afaik นั่นจะทำให้คุณเห็นเอนทิตี html ที่เข้ารหัสเสมอ
4uk4 avatar
cn flag
แต่ทำไมต้องใช้ `'` ในตอนแรก? พิมพ์เครื่องหมายอัญประกาศเดี่ยวด้วยแป้นพิมพ์ของคุณ มีช่องข้อความธรรมดามากมายใน Drupal ซึ่งแปลแล้ว ป้ายกำกับเอนทิตีที่โดดเด่นที่สุด
4uk4 avatar
cn flag
@sonfd ใช่นี่อาจเป็นปัญหา มันไม่ใช่อย่างที่ฉันสงสัย การแปลประกอบด้วยเครื่องหมายอัญประกาศเดี่ยวเป็นอักขระ ASCII ซึ่งจะถูกแปลงเป็นเอนทิตี HTML โดยตัวกรอง XSS เริ่มต้นที่ใช้กับฟิลด์ข้อความธรรมดาทั้งหมด จากนั้นตัวกรอง Twig นี้จะถูก Escape เป็นครั้งที่สอง
4uk4 avatar
cn flag
ดังนั้นช่องข้อความธรรมดาที่แปลตามปกติจึงไม่ทำให้เกิดปัญหาใดๆ
mauzilla avatar
cn flag
หากไม่มี |render ช่องจะว่างเปล่า
Score:2
ธง in

ฉันไม่คิดว่าสิ่งนี้เกี่ยวข้องกับการแปลอื่นนอกจากการแปลของคุณคือเวอร์ชันของโหนดที่มีเครื่องหมายอัญประกาศเดี่ยวในฟิลด์นี้

ปัญหาเป็นเพราะคุณกำลังแสดงฟิลด์ของคุณด้วย |เรนเดอร์|สตริปแท็ก|ตัดแต่ง ชอบ:

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

สิ่งนี้จะทำให้เกิดปัญหาในการแสดงเอนทิตี html ที่เข้ารหัสเสมอ

จาก @ 4uk4 ในความคิดเห็นด้านบน:

การแปลมีเครื่องหมายอัญประกาศเดี่ยวเป็นอักขระ ASCII ซึ่งจะถูกแปลงเป็นเอนทิตี HTML โดยตัวกรอง XSS เริ่มต้นที่ใช้กับฟิลด์ข้อความธรรมดาทั้งหมด จากนั้นตัวกรอง Twig นี้จะถูก Escape เป็นครั้งที่สอง

หากต้องการแก้ไข ให้เรนเดอร์ฟิลด์ของคุณโดยไม่ใช้ |เรนเดอร์|สตริปแท็ก|ตัดแต่งเช่น เพียงใช้:

{{ field.created.content }}
mauzilla avatar
cn flag
หากไม่มี |render ผลลัพธ์จะว่างเปล่า
sonfd avatar
in flag
คุณใช้ `{{ field.created.content }}` หรือ `{{ field.created.content|striptags|trim }}` หลังจะไม่ทำงาน

โพสต์คำตอบ

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