php检测阿拉伯文和泰文依赖unicode属性正则\p{arabic}与\p{thai},需启用/u修饰符及utf-8环境;不支持nlp级语种识别,仅判断字符所属脚本区块。

PHP 识别阿拉伯文和泰文脚本,核心不是“识别语言”,而是检测文本中是否包含对应 Unicode 脚本的字符。PHP 本身不带 NLP 级别的语言识别(如判断一段文字“是阿拉伯语还是泰语”),但可通过正则表达式精准匹配 Unicode 区块,确认字符串是否含阿拉伯字母、泰文字符等。
以下方法均基于 UTF-8 编码环境(必须确保 mb_internal_encoding('UTF-8') 已设置,且文件/数据库/HTTP 均启用 UTF-8)。
✅ 检测是否含阿拉伯文字
使用 \p{Arabic} Unicode 属性(推荐)或显式 Unicode 范围:
function containsArabic($text) {
return (bool) preg_match('/\p{Arabic}/u', $text);
}
// 示例
var_dump(containsArabic("مرحبا! أهلاً")); // true
var_dump(containsArabic("Hello world")); // false
✅
\p{Arabic}自动覆盖 U+0600–U+06FF、U+0670–U+06FF、U+067E/U+0686/U+06AF(波斯扩展)等常用区块,比手写\x{0600}-\x{06FF}更健壮。
✅ 检测是否含泰文(Thai)文字
泰文 Unicode 区块为 U+0E00–U+0E7F,对应 \p{Thai} 属性:
function containsThai($text) {
return (bool) preg_match('/\p{Thai}/u', $text);
}
// 示例
var_dump(containsThai("สวัสดีครับ")); // true
var_dump(containsThai("Xin chào")); // false(越南文,属 \p{Latin})
✅ 同时检测多种脚本(混合判断)
可组合使用多个 \p{...} 属性,支持“或”逻辑:
// 检查是否含阿拉伯文 或 泰文
function hasArabicOrThai($text) {
return (bool) preg_match('/[\p{Arabic}\p{Thai}]/u', $text);
}
// 区分类型:返回 'arabic' / 'thai' / 'mixed' / 'none'
function detectScript($text) {
$hasAr = preg_match('/\p{Arabic}/u', $text);
$hasTh = preg_match('/\p{Thai}/u', $text);
if ($hasAr && $hasTh) return 'mixed';
if ($hasAr) return 'arabic';
if ($hasTh) return 'thai';
return 'none';
}
⚠️ 注意事项
- 必须加
/u修饰符,否则\p{...}不生效,且 UTF-8 多字节字符会被错误切分; - 不要用
strlen()判断字符数,改用mb_strlen($text, 'UTF-8'); - 避免用
ord()或$str[0]直接访问,会破坏 UTF-8 字节序列; - 若需更高级语言识别(如概率判断语种),应调用专用服务(如 Google Cloud Natural Language API 或 Python 的
langdetect+ PHP exec); - Tesseract OCR 可实际识别图像中的阿拉伯文/泰文(需安装对应语言包:
tesseract-ocr-arab、tesseract-ocr-thai),但那是 OCR 场景,非纯文本检测。
不复杂但容易忽略
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











