PHP将特殊字符转换为HTML实体

时间:2017-02-15 16:59:52

标签: php wordpress unicode

我有一个字符串ex:

$ a =' abcabc';

小蓝钻'是:bin2hex('') => f09f94b9

Small blue diamond representation

所以,我想将$ a字符串转换为一个字符串,表示带有HTML-escape的小蓝钻:🔹

将调用所有unicode字符转换为HTML-escape表示形式的函数是什么?

关于此案例的更多细节

在WordPress中,当我想将$ a变量插入表中时,$ wpdb会检查它。 Link to WPDB source code

当WordPress准备应插入或更新的$data时,它会运行$wpdb->strip_invalid_text方法上的字段,然后检查$data中是否找到任何无效内容。使用以下正则表达式对$ a变量中的文本无效:

                $regex = '/
                (
                    (?: [\x00-\x7F]                  # single-byte sequences   0xxxxxxx
                    |   [\xC2-\xDF][\x80-\xBF]       # double-byte sequences   110xxxxx 10xxxxxx
                    |   \xE0[\xA0-\xBF][\x80-\xBF]   # triple-byte sequences   1110xxxx 10xxxxxx * 2
                    |   [\xE1-\xEC][\x80-\xBF]{2}
                    |   \xED[\x80-\x9F][\x80-\xBF]
                    |   [\xEE-\xEF][\x80-\xBF]{2}';
            if ( 'utf8mb4' === $charset ) {
                $regex .= '
                    |    \xF0[\x90-\xBF][\x80-\xBF]{2} # four-byte sequences   11110xxx 10xxxxxx * 3
                    |    [\xF1-\xF3][\x80-\xBF]{3}
                    |    \xF4[\x80-\x8F][\x80-\xBF]{2}
                ';
            }
            $regex .= '){1,40}                          # ...one or more times
                )
                | .                                  # anything else
                /x';
            $value['value'] = preg_replace( $regex, '$1', $value['value'] );
            if ( false !== $length && mb_strlen( $value['value'], 'UTF-8' ) > $length ) {
                $value['value'] = mb_substr( $value['value'], 0, $length, 'UTF-8' );
            }

当小蓝钻'用f09f94b9表示,此正则表达式标记数据无效。用🔹表示时。所以我需要的是将unicode字符转换为WordPress接受的表示形式。

1 个答案:

答案 0 :(得分:3)

以下是我想要转换的所有字符,您可以将其进一步修改为仅转换所需范围内的字符。

$s = 'abcdef';
$a = preg_split('//u', $s, null, PREG_SPLIT_NO_EMPTY);

foreach($a as $c){
    echo '&#' . unpack('V', iconv('UTF-8', 'UCS-4LE', $c))[1] . ';';
}