Merge c766766776
into 50a0018363
This commit is contained in:
commit
362de05487
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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)) {
|
||||
|
|
|
@ -3,6 +3,6 @@
|
|||
>
|
||||
{$Content}
|
||||
<% if $Arguments.caption %>
|
||||
<p class="caption">{$Arguments.caption}</p>
|
||||
<p class="caption">{$Arguments.caption.RAW}</p>
|
||||
<% end_if %>
|
||||
</div>
|
||||
|
|
|
@ -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: ä, ö, & ü', $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 & partners",
|
||||
"The company & partners"
|
||||
],
|
||||
"double ampersand" => [
|
||||
"The company &amp; partners",
|
||||
"The company &amp; partners"
|
||||
],
|
||||
"left arrow and right arrow" => [
|
||||
"<p><strong>The company &amp; partners</strong></p>",
|
||||
"<p>&lt;strong&gt;The company &amp; partners&lt;/strong&gt;</p>"
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideTestValueEntities
|
||||
*/
|
||||
public function testValueEntities(string $input, string $result)
|
||||
{
|
||||
$inputText = "The company & partners";
|
||||
$field = new HTMLEditorField("Content");
|
||||
$field->setValue($inputText);
|
||||
$field->setValue($input);
|
||||
|
||||
$this->assertEquals(
|
||||
"The company & partners",
|
||||
$field->obj('ValueEntities')->forTemplate()
|
||||
);
|
||||
|
||||
$inputText = "The company && partners";
|
||||
$field = new HTMLEditorField("Content");
|
||||
$field->setValue($inputText);
|
||||
|
||||
$this->assertEquals(
|
||||
"The company && partners",
|
||||
$result,
|
||||
$field->obj('ValueEntities')->forTemplate()
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue