Open
Reported for: إضافة WPML Multilingual CMS 4.6.13
Overview of the issue
When translating pages created with Elementor using WPML’s Advanced Translation Editor (ATE), characters like <
(less than) or >
(greater than) are stripped out or incorrectly interpreted as HTML tags.
Workaround
Please, make sure of having a full site backup of your site before proceeding.
- Open …/wp-content/plugins/sitepress-multilingual-cms/classes/xliff/class-wpml-tm-xliff-writer.php file.
- Look for line 407.
- Replace:
1234567891011121314
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
);
}
- With:
12345678910111213141516
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
);
}