andersundsehr / shy-converter
Converts HTML soft hyphens and non-breaking spaces to their UTF-8 equivalents and includes a database migration for existing data.
Package info
github.com/andersundsehr/shy-converter
Type:typo3-cms-extension
pkg:composer/andersundsehr/shy-converter
Requires
- typo3/cms-backend: ^13.4 || ^14.0
- typo3/cms-core: ^13.4 || ^14.0
Requires (Dev)
None
Suggests
- andersundsehr/aus_project: *
Provides
None
Conflicts
None
Replaces
None
This package is not auto-updated.
Last update: 2026-09-16 03:41:32 UTC
README
This extension converts HTML soft hyphens (­ and the malformed ­) and non-breaking spaces ( ) to their UTF-8 equivalents. It includes a database migration to update existing data.
Installation
Install the extension in a TYPO3 13.4 or 14 project:
composer require andersundsehr/shy-converter
Optionally migrate existing values after reviewing the affected records:
vendor/bin/typo3 shy-converter:migrate --dry-run vendor/bin/typo3 shy-converter:migrate
Visible special characters in backend input fields
Plain TCA input fields without an explicit renderType automatically use the
visibleShy render type. Stored UTF-8 soft hyphens (U+00AD) and non-breaking
spaces (U+00A0) are displayed as the visible strings ­ and  ,
so editors can find, add, or remove them.
The render type uses TYPO3's hidden input for the persisted value. Its backend
JavaScript converts ­ and the malformed variant &shy to U+00AD, and
  to U+00A0, while editors type and immediately before the form is
submitted. Literal entity-like text is displayed with an & prefix and
stored unchanged, matching TYPO3's Visual Editor behavior. The original hidden
value remains untouched until the JavaScript is initialized, preventing an
unconverted visible value from being submitted if initialization fails.
The conversion is intentionally scoped to forms rendered with visibleShy.
Direct or programmatic DataHandler calls are not modified. Input fields with
another explicit render type and fields inside FlexForms are not changed
automatically.
The render type can also be assigned explicitly:
'config' => [ 'type' => 'input', 'renderType' => 'visibleShy', ],