gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:32:35 25 4
gpt4 key购买 nike

我想将一组字符串格式的 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 错误:

Warning: preg_replace() [function.preg-replace]: Compilation failed: PCRE does not support \L, \l, \N, \U, or \u

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

此外,我还查看了我在网上可以找到的与将 Unicode 代码点转换为 PHP 中的实际字符相关的各种其他相关页面/帖子,但要么是我遗漏了一些关键的东西,要么是出了什么问题,因为我无法解决我遇到的问题。

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

最佳答案

来自PHP manual :

Single and double quoted PHP strings have special meaning of backslash. Thus if \ has to be matched with a regular expression \\, then "\\\\" or '\\\\' must be used in PHP code.

首先,在您的正则表达式中,您只使用了一个反斜杠 (\)。如 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 - 如何使用 PHP 的 preg_replace 函数将 Unicode 代码点转换为实际字符/HTML 实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20931113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com