如何使用PHP preg_replace函数将Unicode代码点转换为实际字符/ HTML实体? - php

我想将一组字符串格式的Unicode代码点转换为实际的字符和/或HTML实体(两种结果都可以)。

例如,如果我有以下字符串分配:

$str = '\u304a\u306f\u3088\u3046';

我想使用preg_replace函数将那些Unicode代码点转换为实际字符和/或HTML实体。

根据我在类似问题中看到的其他Stack Overflow帖子,我首先尝试了以下操作:

$str = '\u304a\u306f\u3088\u3046';
$str2 = preg_replace('/\u[0-9a-f]+/', '&#x$1;', $str);

但是,每当尝试执行此操作时,都会出现以下PHP错误:

警告:preg_replace()[function.preg-replace]:编译失败:PCRE不支持\ L,\ l,\ N,\ U或\ u

我尝试了各种方法,例如将u标志添加到正则表达式或将/\u[0-9a-f]+/更改为/\x{[0-9a-f]+}/,但似乎没有任何效果。

另外,我看了我在网络上可以找到的各种其他相关页面/帖子,这些页面/帖子与将Unicode代码点转换为PHP中的实际字符有关,但是我错过了一些关键性的问题或某些错误的原因,因为我可以解决我遇到的问题。

有人可以为我提供一个有关如何将Unicode代码点的字符串转换为实际字符和/或HTML实体字符串的具体解决方案吗?

参考方案

从PHP manual:

单引号和双引号的PHP字符串具有反斜杠的特殊含义。因此,如果\必须与正则表达式\\匹配,则必须在PHP代码中使用"\\\\"'\\\\'

首先,在您的正则表达式中,您仅使用一个反斜杠(\)。如PHP手册中所述,您需要使用\\\\来匹配文字反斜杠(with some exceptions)。

其次,您在原始表达式中缺少捕获组。 preg_replace()在给定的字符串中搜索与提供的模式匹配的字符串,并返回该字符串,其中与捕获组匹配的内容被替换字符串替换。

具有正确转义和正确捕获组的更新后的正则表达式如下所示:

$str2 = preg_replace('/\\\\u([0-9a-f]+)/i', '&#x$1;', $str);

输出:

おはよう

表达式:\\\\u([0-9a-f]+)

\\\\-与文字反斜杠匹配
u-与文字u字符匹配
(-捕获组的开始

[0-9a-f]-字符类-一次或多次匹配一个数字(0-9)或一个字母(来自a-f

)-捕获组结束
i修饰符-用于不区分大小写的匹配

替代:&#x$1

&-文字与符号(&
#-文字井字号(#
x-文字字符x
$1-第一个捕获组的内容-在这种情况下,其形式为304a等字符串。

RegExr Demo.

如何使用php preg_split从字符串中获取除括号以外的所有内容? - php

$str = "[10:42-23:10]part1[11:30-13:20]part2" 我希望将其拆分为:[1] 10:42-23:10 [2] part1 [3] 11:30-13:20 [4] part2 我设法弄出的最好的是:$parts = preg_split("/(\\[*\\])\w+/", $str…

php preg_replace两个或更多空格 - php

我正在寻找替换多个空格字符的实例。我最初的搜索似乎都集中在使用/s,但这包括换行符和其他空格我认为应该接近吗?用一个空格替换两个或更多实例空格" "preg_replace('/ {2,}/', ' ', $string); 参考方案 尝试一下:preg_replace('/\s\s+/&…

PHP:Preg_replace,单词边界和非单词字符 - php

我需要替换文本中以井号(#)开头的单词。好吧,我知道如何替换整个单词。preg_replace("/\b".$variable."\b/", $value, $text);由于该\ b修饰符仅接受单词字符,因此不会替换包含井号的单词。我有这个html,其中包含#companyName类型的变量,我将其替换为一个值。 参…

PHP preg_replace删除字符串中的第一个HTML元素 - php

我想在PHP中删除html字符串(始终是一个段落)的整个第一个元素。我目前的方法是使用:$passage = preg_replace('/.*?\b'.'</p>'.'\b/s', '', $passage, 1); 由于</p>中的特殊字符,此方法不起…

PHP preg_match直到双行中断 - php

我在mysql字段中有此数据:First text text text text text text text text text text text text text text text text text text text text Second text text text text text text text text text text te…