| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- <?php
- namespace Illuminate\Support;
- use BackedEnum;
- use Illuminate\Contracts\Support\DeferringDisplayableValue;
- use Illuminate\Contracts\Support\Htmlable;
- class EncodedHtmlString extends HtmlString
- {
- /**
- * The HTML string.
- *
- * @var \Illuminate\Contracts\Support\DeferringDisplayableValue|\Illuminate\Contracts\Support\Htmlable|\BackedEnum|string|int|float|null
- */
- protected $html;
- /**
- * The callback that should be used to encode the HTML strings.
- *
- * @var callable|null
- */
- protected static $encodeUsingFactory;
- /**
- * Create a new encoded HTML string instance.
- *
- * @param \Illuminate\Contracts\Support\DeferringDisplayableValue|\Illuminate\Contracts\Support\Htmlable|\BackedEnum|string|int|float|null $html
- * @param bool $doubleEncode
- */
- public function __construct($html = '', protected bool $doubleEncode = true)
- {
- parent::__construct($html);
- }
- /**
- * Convert the special characters in the given value.
- *
- * @internal
- *
- * @param string|null $value
- * @param int $withQuote
- * @param bool $doubleEncode
- * @return string
- */
- public static function convert($value, bool $withQuote = true, bool $doubleEncode = true)
- {
- $flag = $withQuote ? ENT_QUOTES : ENT_NOQUOTES;
- return htmlspecialchars($value ?? '', $flag | ENT_SUBSTITUTE, 'UTF-8', $doubleEncode);
- }
- /**
- * Get the HTML string.
- *
- * @return string
- */
- #[\Override]
- public function toHtml()
- {
- $value = $this->html;
- if ($value instanceof DeferringDisplayableValue) {
- $value = $value->resolveDisplayableValue();
- }
- if ($value instanceof Htmlable) {
- return $value->toHtml();
- }
- if ($value instanceof BackedEnum) {
- $value = $value->value;
- }
- return (static::$encodeUsingFactory ?? function ($value, $doubleEncode) {
- return static::convert($value, doubleEncode: $doubleEncode);
- })($value, $this->doubleEncode);
- }
- /**
- * Set the callable that will be used to encode the HTML strings.
- *
- * @param callable|null $factory
- * @return void
- */
- public static function encodeUsing(?callable $factory = null)
- {
- static::$encodeUsingFactory = $factory;
- }
- /**
- * Flush the class's global state.
- *
- * @return void
- */
- public static function flushState()
- {
- static::$encodeUsingFactory = null;
- }
- }
|