shortcode内容不等于作为字符串值传递的相同文本.preg_match_all返回不同的结果


shortcode content does not equal same text passed as a string value. preg_match_all returns different results

我有一个简短的代码,应该使用preg_match_all解析格式如下的内容:

Sex:3,Drugs,4,Violence:1,Rock & Roll,5

分为标签和数字评级。

当我将以上内容作为字符串变量输入时,以下模式有效:

%(['w&'s]+)[:,'|'/]{1}('d+)(['|,'|'/]{0,1})%

该模式足够智能,可以在值之间使用多个分隔符。只要一个单词,它就一直有效。然而,当我在一个shortcode函数中输入与$content值完全相同的字符串时,最后一个标签"Rock&Roll,'返回为"Roll"。

为了清楚起见,我将与字符串变量$contentX完全相同的值输入到preg_match_all中,它返回"Rock&滚。"

此外,当我使用将$content变量与我的$contentX变量进行比较时

if ($content === $contentX) {
}

PHP告诉我,这两个字符串是而不是完全相等的,尽管$contentX是通过短代码提供的文本的精确副本。

不知怎的,通过shortcode$content变量可以改变字符串,从而改变正则表达式的行为。我能对$content变量做些什么吗,使其行为与直接传递给preg_match_all的字符串值相同?

这是比较两个的代码。

function WTF($atts, $content) {
    $pattern = '%(['w&'s]+)[:,'|'/]{1}('d+)(['|,'|'/]{0,1})%';
    $conX = 'Sex:3,Drugs,4,Violence:1,Rock & Roll,5';
    preg_match_all($pattern, $content, $xmatch, PREG_SET_ORDER);
    preg_match_all($pattern, $conX, $ymatch, PREG_SET_ORDER);
    $ret = '<pre>' . print_r($xmatch, TRUE);
    $ret .= "'n" . print_r($ymatch, TRUE);
    if ($content === $conX) {
        $ret .= "'n" . 'Match!';
    } else {
        $ret .= "'nNo Match!";
    }
    $ret .= '</pre>';
    return $ret;
}

第一次通过的print_f($content)返回如下:

Array
(
  [3] => Array
    (
        [0] =>  Roll,5
        [1] =>  Roll
        [2] => 5
        [3] => 
    )
)

这是$conX的print_r()输出如下:

Array
(
  [3] => Array
    (
        [0] => Rock & Roll,5
        [1] => Rock & Roll
        [2] => 5
        [3] => 
    )
 )

我必须通过html_entity_decode函数运行$content。这将使内容返回到其原始形式,并且preg_match按预期工作。