This commit is contained in:
Sabina Talipova 2024-05-17 03:51:25 +00:00 committed by GitHub
commit 362de05487
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 46 additions and 16 deletions

View File

@ -191,7 +191,22 @@ class HTMLEditorField extends TextareaField
*/
public function ValueEntities()
{
return htmlentities($this->Value() ?? '', ENT_COMPAT, 'UTF-8', false);
$entities = get_html_translation_table(HTML_ENTITIES);
foreach ($entities as $key => $value) {
$entities[$key] = "/" . $value . "/";
}
$value = preg_replace_callback($entities, function ($matches) {
// Don't apply double encoding to ampersand
if ($matches[0] != '&') {
return str_replace($matches[0], htmlentities($matches[0], ENT_COMPAT, 'UTF-8', true), $matches[0]);
} else {
return str_replace($matches[0], htmlentities($matches[0], ENT_COMPAT, 'UTF-8', false), $matches[0]);
}
}, $this->Value());
return $value;
}
/**

View File

@ -171,6 +171,10 @@ class EmbedShortcodeProvider implements ShortcodeHandler
$arguments['style'] = 'width: ' . intval($arguments['width']) . 'px;';
}
if (!empty($arguments['caption'])) {
$arguments['caption'] = htmlentities($arguments['caption'], ENT_QUOTES, 'UTF-8', false);
}
// override iframe dimension attributes provided by webservice with ones specified in shortcode arguments
foreach (['width', 'height'] as $attr) {
if (!($value = $arguments[$attr] ?? false)) {

View File

@ -3,6 +3,6 @@
>
{$Content}
<% if $Arguments.caption %>
<p class="caption">{$Arguments.caption}</p>
<p class="caption">{$Arguments.caption.RAW}</p>
<% end_if %>
</div>

View File

@ -74,7 +74,7 @@ class HTMLEditorFieldTest extends FunctionalTest
$inputText = "These are some unicodes: ä, ö, & ü";
$field = new HTMLEditorField("Test", "Test");
$field->setValue($inputText);
$this->assertStringContainsString('These are some unicodes: &auml;, &ouml;, &amp; &uuml;', $field->Field());
$this->assertStringContainsString('These are some unicodes: ä, ö, & ü', $field->Field());
// Test shortcodes
$inputText = "Shortcode: [file_link id=4]";
$field = new HTMLEditorField("Test", "Test");
@ -210,23 +210,34 @@ EOS
);
}
public function testValueEntities()
public function provideTestValueEntities()
{
return [
"ampersand" => [
"The company &amp; partners",
"The company &amp; partners"
],
"double ampersand" => [
"The company &amp;amp; partners",
"The company &amp;amp; partners"
],
"left arrow and right arrow" => [
"<p>&lt;strong&gt;The company &amp;amp; partners&lt;/strong&gt;</p>",
"<p>&amp;lt;strong&amp;gt;The company &amp;amp; partners&amp;lt;/strong&amp;gt;</p>"
],
];
}
/**
* @dataProvider provideTestValueEntities
*/
public function testValueEntities(string $input, string $result)
{
$inputText = "The company &amp; partners";
$field = new HTMLEditorField("Content");
$field->setValue($inputText);
$field->setValue($input);
$this->assertEquals(
"The company &amp; partners",
$field->obj('ValueEntities')->forTemplate()
);
$inputText = "The company &amp;&amp; partners";
$field = new HTMLEditorField("Content");
$field->setValue($inputText);
$this->assertEquals(
"The company &amp;&amp; partners",
$result,
$field->obj('ValueEntities')->forTemplate()
);
}