我正在使用 PHPWord库通过我的PHP应用程序替换Word Doc中的一些占位符文本。
我必须允许用户使用一些预定义的占位符上传Word文档,例如 $ {Anchor1} , $ {Anchor2} 等。
现在会发生一些用户将占位符定义为 $ {author1} 等。
但 setValue 以区分大小写方式工作。
是否有任何方法可以通过PHPWord中的setValue使用不区分大小写的替换
此致
答案 0 :(得分:0)
没有为此预定义的选项,但在这里您可以制作一些Monkey Patching。
您可以修改源方法,但这不是一个好主意,因为如果您将库更新为较新版本,则会丢失更改。
除此之外,您可以创建一个扩展原始类的新类,并添加一个调用原始setValue
的方法,但它会复制params以将它们传递给小写和大写。< / p>
这是我的方法。我无法尝试,但我认为它会起作用(当然,你可以为类和方法选择一些更好的名字)。
class TemplateProcessorCaseInsensitive extends TemplateProcessor
{
public function setValueCaseInsensitive($search, $replace, $limit = self::MAXIMUM_REPLACEMENTS_DEFAULT)
{
if (is_array($search)) {
foreach ($search as &$item) {
$item = strtolower($item);
}
$capitalizedSearch = $search;
foreach ($capitalizedSearch as &$capitalizedItem){
$capitalizedItem = ucfirst($capitalizedItem);
}
$search = array_merge($search, $capitalizedSearch);
}
else{
$search = array(strtolower($search), ucfirst(strtolower($search)));
}
if(is_array($replace)){
$replace = array_merge($replace, $replace);
}
else{
$replace = array($replace, $replace);
}
$this->setValue($search, $replace, $limit);
}
}
让我们看一些例子!
示例1
如果你这样做:
$templateProcessor = new TemplateProcessorCaseInsensitive ('Template.docx');
$templateProcessor->setValueCaseInsensitive('Name', 'John Doe');
实际上你是在后台这样做的:
$templateProcessor = new TemplateProcessor('Template.docx');
$templateProcessor->setValue(array('name', 'Name'), array('John Doe', 'John Doe'));
示例2
如果你这样做:
$templateProcessor = new TemplateProcessorCaseInsensitive ('Template.docx');
$templateProcessor->setValueCaseInsensitive(array('City', 'Street'), array('Detroit', '12th Street'));
实际上你是在后台这样做的:
$templateProcessor = new TemplateProcessor('Template.docx');
$templateProcessor->setValue(array('city', 'street', 'City', 'Street'), array('Detroit', '12th Street', 'Detroit', '12th Street'));