You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何检测给定文本的书写脚本类型?支持多脚本场景

检测文本书写脚本类型的PHP方案

1. 利用PHP的Intl扩展(推荐)

PHP的国际化扩展Intl提供了IntlChar类,可通过字符的Unicode属性判断所属脚本。其中IntlChar::getScript()方法能返回单个字符对应的脚本代码(如Latn代表拉丁、Arab代表阿拉伯、Cyrl代表西里尔、Deva代表天城文等),完美适配多脚本混合或未知脚本的场景。

处理混合文本的示例代码:

function detectScripts(string $text): array {
    $scripts = [];
    $length = mb_strlen($text);
    
    for ($i = 0; $i < $length; $i++) {
        $char = mb_substr($text, $i, 1);
        $script = IntlChar::getScript($char);
        
        if ($script && !in_array($script, $scripts)) {
            $scripts[] = $script;
        }
    }
    
    return $scripts;
}

// 示例调用
$text = "Hello سلام नमस्ते";
print_r(detectScripts($text));
// 输出:Array ( [0] => Latn [1] => Arab [2] => Deva )

注意:需确保服务器已安装并启用Intl扩展,大部分生产环境默认支持。

2. 自定义Unicode范围判断

若无法使用Intl扩展,可通过字符的Unicode编码范围手动判断脚本类型。例如:

  • 拉丁脚本:U+0000-U+007F、U+0080-U+00FF
  • 阿拉伯脚本:U+0600-U+06FF
  • 西里尔脚本:U+0400-U+04FF
  • 天城文:U+0900-U+097F

示例代码片段:

function getScriptByUnicode(string $char): ?string {
    $code = mb_ord($char);
    
    if ($code >= 0x0000 && $code <= 0x00FF) {
        return 'Latn';
    } elseif ($code >= 0x0600 && $code <= 0x06FF) {
        return 'Arab';
    } elseif ($code >= 0x0400 && $code <= 0x04FF) {
        return 'Cyrl';
    } elseif ($code >= 0x0900 && $code <= 0x097F) {
        return 'Deva';
    }
    // 可根据需求扩展更多脚本的Unicode范围
    return null;
}

这种方式需手动维护Unicode范围,适合轻量场景,但扩展性较差。

3. 第三方库替代

你提到的库需要预先指定脚本类型,不适合未知场景。可选择基于Intl扩展封装的第三方库,这类库通常能自动检测文本中的所有脚本类型,无需提前指定。


内容的提问来源于stack exchange,提问作者user934820

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:20:43