preg_replace
期望它是由字符包围的正则表达式。通常是斜线,如下所示:
\'/.*/\'
执行此操作时:
preg_replace(\'%%PROPOSAL_LINK_URL%%\', $some_text, $replacement);
preg_replace
想想前两个
%
是周围的字符,由于无法识别的修饰符而失败。这很容易测试:
$ php -a
Interactive shell
php > echo preg_replace(\'%%PROPOSAL_LINK_URL%%\', \'%%PROPOSAL_LINK_URL%%\', \'here\'), PHP_EOL;
PHP Warning: preg_replace(): Unknown modifier \'P\' in php shell code on line 1
PHP Stack trace:
PHP 1. {main}() php shell code:0
PHP 2. preg_replace() php shell code:1
Warning: preg_replace(): Unknown modifier \'P\' in php shell code on line 1
Call Stack:
28.9460 235264 1. {main}() php shell code:0
28.9460 236016 2. preg_replace() php shell code:1
php >
您有两种选择:
将您的模式更改为以下内容:/%%PROPOSAL_LINK_URL%%/
和/%%PROPOSAL_LINK%%/
$ php -a
Interactive shell
php > echo preg_replace(\'/%%PROPOSAL_LINK_URL%%/\', \'%%PROPOSAL_LINK_URL%%\', \'here\'), PHP_EOL;
here
忘掉一切
preg_replace
因为你不需要它。使用
str_replace
或
str_ireplace
相反
<?php
str_replace(\'%%PROPOSAL_LINK_URL%%\', $proposal_link_url, $email_content);
str_ireplace(\'%%PROPOSAL_LINK%%\', $proposal_link, $email_content);
请注意
str_replace
默认情况下,在包含多字节字符(如UTF-8)的字符串上使用它是不安全的。你可以
change this.
注意:您已使用$link_pattern
在代码示例中重复两次。我想你是说第二个$url_pattern
.
EDIT: 看来没有mb_*
替换为str_replace
或str_ireplace
this comment 在php上。net揭示了这个问题。str_replace
<如果针和干草堆的编码相同,em>应该处理多字节字符串。