PHP实现阿拉伯字母转罗马字符输出异常问题排查求助
问题排查及修复方案
错误原因
- 核心逻辑错误:当前实现没有按输入字符串的原有字符顺序逐个转写,而是按自定义的字符变量顺序,检查「整个输入字符串是否包含该字符」,只要存在就输出对应转写内容,自然会出现字符顺序错乱、重复字符仅输出一次的问题。
- 匹配判断逻辑错误:使用
stripos($imp, $字符) == true判断字符存在不符合函数特性,stripos匹配成功时返回字符对应的下标,若字符出现在字符串首位会返回整数0,0 == true会被判定为false,导致匹配遗漏,正确判断字符存在的写法是stripos(待查字符串, 目标字符) !== false。 - 映射管理不规范:为每个字符单独定义变量的写法冗余且容易出错,不便于后续规则调整。
修复后代码
<!DOCTYPE HTML> <head> <?php header('Content-type: text/html; charset=utf-8'); ?> </head> <body> <?php $mystr = "خاتم الانبیاء"; echo $mystr; echo "<hr>"; // 统一维护转写映射表 $transMap = [ "ء" => "a", "ا" => "a", "آ" => "aa", "ب" => "b", "پ" => "p", "ة" => "h", "ت" => "t", "ٹ" => "t", "ث" => "s", "ج" => "j", "چ" => "ch", "ح" => "h", "خ" => "kh", "د" => "d", "ڈ" => "d", "ذ" => "z", "ر" => "r", "ڑ" => "rr", "ز" => "z", "ژ" => "x", "س" => "s", "ش" => "sh", "ص " => "s", "ض" => "d", "ط" => "t", "ظ" => "z", "ع" => "u", "غ" => "gh", "ف" => "f", "ق" => "q", "ک" => "k", "گ" => "g", "ل" => "l", "م" => "m", "ن" => "n", "ں" => "n", "ہ" => "h", "ھ" => "h", "و" => "o", "ے" => "y", "ى" => "y", "ي" => "y", " " => "_space_" ]; // 拆分字符串为单个字符数组,过滤掉拆分产生的空值 $chars = array_filter(preg_split('//u', $mystr), function($val) { return $val !== ''; }); echo "<div style='direction: ltr;'>"; // 按原顺序遍历每个字符转写输出 foreach ($chars as $char) { echo $transMap[$char] ?? ''; } echo "</div>"; echo "<hr>"; ?> </body> </html>
修复后代码会严格按照输入字符串的字符顺序逐个匹配转写规则输出,即可得到预期的khatm_space_alanbyaa结果。
内容的提问来源于stack exchange,提问作者usman610
相关产品推荐
相关产品推荐

