- 状态
- 已解决
- 报告针对
- WPML Multilingual CMS 4.6.13
- 解决于
- WPML 4.7.2
- 相关插件/主题
- Elementor
- 主题标签
- ATE, Compatibility
问题概述
使用 WPML 的高级翻译编辑器 (ATE) 翻译由 Elementor 创建的页面时,诸如 <(小于号)或 >(大于号)等字符会被移除或错误地解析为 HTML 标签。
临时解决方法
在继续操作之前,请确保对您的站点进行了完整站点备份。
- 打开 …/wp-content/plugins/sitepress-multilingual-cms/classes/xliff/class-wpml-tm-xliff-writer.php 文件。
- 找到第 407 行。
- 将:
private function remove_line_breaks_inside_tags( $string ) { return preg_replace_callback( '/(<[^>]*>)/m', array( $this, 'remove_line_breaks_inside_tag_callback' ), $string ); } /** * @param array $matches * * @return string */ private function remove_line_breaks_inside_tag_callback( array $matches ) { $tag_string = preg_replace( '/([\nr\t ]+)/', ' ', $matches[0] ); $tag_string = preg_replace( '/(<[\s]+)/', '<', $tag_string ); return preg_replace( '/([\s]+>)/', '>', $tag_string ); } - 替换为:
private function remove_line_breaks_inside_tags( $string ) { // Match only valid HTML tags (opening, closing, or self-closing) return preg_replace_callback( '/(<\/?[a-zA-Z][^<>]*>)/m', array( $this, 'remove_line_breaks_inside_tag_callback' ), $string ); } /** * @param array $matches * * @return string */ private function remove_line_breaks_inside_tag_callback( array $matches ) { // Remove unnecessary spaces and line breaks inside valid HTML tags $tag_string = preg_replace( '/([\nr\t ]+)/', ' ', $matches[0] ); $tag_string = preg_replace( '/(<[\s]+)/', '<', $tag_string ); return preg_replace( '/([\s]+>)/', '>', $tag_string ); }