Docx format has so much unconsistency in their xml files and I just can't predict every case. You still can use extension, but on your own risk.
Require this package with composer using the following command:
composer require irebega/docx-replacer
This code will replace $search to $replace in $pathToDocx file
$docx = new \IRebega\DocxReplacer\Docx($pathToDocx);
$docx->replaceText($search, $replace);
If you want search to be case insensitive use replaceTextInsensitive
like:
$docx = new \IRebega\DocxReplacer\Docx($pathToDocx);
$docx->replaceTextInsensitive($search, $replace);
This code will replace text $search to image that are located in $path in $pathToDocx file
$docx = new \IRebega\DocxReplacer\Docx($pathToDocx);
$docx->replaceTextToImage($search, $path);
PHP .docx replacer is open-sourced software licensed under the MIT license