TWIG中如何转义单引号?FILENAME含单引号致XPath语法错误
解决TWIG中XPath包含单引号的转义问题
问题本质
你的TWIG代码里,当#FILENAME#包含单引号(比如08 - Fiche d'option.pdf)时,代入后会直接破坏XPath的字符串语法——XPath用单引号包裹字符串时,内部的单引号会提前闭合参数,导致TWIG解析报错。
正确处理方案
核心思路是按照XPath规范转义单引号:XPath中,单引号包裹的字符串内部若出现单引号,需要用两个连续单引号来转义。结合TWIG的语法特性,具体实现如下:
修改后的代码
{% set processed_filename = '#FILENAME#'|replace({"'": "''"}) %} {% if xpath('md_file', '//Archive/DOSSIER_MDPH[contains(\'' ~ processed_filename ~ '\', Identifiant)]') %} {{ xpath('md_file', '//Archive/DOSSIER_MDPH[contains(\'' ~ processed_filename ~ '\', Identifiant)]/Personne/LIBLDOMA') }} {% endif %}
关键步骤说明
- 预处理文件名:用TWIG的
replace过滤器,把文件名里的单个单引号'替换成两个单引号'',满足XPath的转义要求。 - 拼接合法的XPath字符串:用
~拼接TWIG变量与XPath模板,同时用\'转义包裹XPath的外层单引号,避免语法冲突。 - 弃用实体引用:原来的
"会引入额外的实体解析问题,直接用转义单引号包裹XPath字符串更可靠。
效果验证
当#FILENAME#为08 - Fiche d'option.pdf时,预处理后变量值变为08 - Fiche d''option.pdf,最终生成的XPath表达式为:
//Archive/DOSSIER_MDPH[contains('08 - Fiche d''option.pdf', Identifiant)]
该表达式完全符合XPath语法规范,不会触发解析错误。
内容的提问来源于stack exchange,提问作者Pick
相关产品推荐
相关产品推荐

