gpt4 book ai didi

php - 为什么不能将所有字符从全角字符更改为半角字符?

转载 作者:可可西里 更新时间:2023-10-31 23:10:47 24 4
gpt4 key购买 nike

我想把所有字符从全角字符变成半角字符,写下面的代码来完成这项工作。例如,要更改

中的所有全角字符
 Codebit.cn - 聚合小段精华代码 

成半角字符,成

 codebit.cn - 聚合小段精华代码

有两种方法可以达到目的,但都失败了。
所有的php文件都保存为utf-8格式。

方法一:

<?php
function fulltohalf($str){
$arr=Array(
'0' => '0', '1' => '1', '2' => '2', '3' => '3', '4' => '4',
'5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9',
'A' => 'A', 'B' => 'B', 'C' => 'C', 'D' => 'D', 'E' => 'E',
'F' => 'F', 'G' => 'G', 'H' => 'H', 'I' => 'I', 'J' => 'J',
'K' => 'K', 'L' => 'L', 'M' => 'M', 'N' => 'N', 'O' => 'O',
'P' => 'P', 'Q' => 'Q', 'R' => 'R', 'S' => 'S', 'T' => 'T',
'U' => 'U', 'V' => 'V', 'W' => 'W', 'X' => 'X', 'Y' => 'Y',
'Z' => 'Z', 'a' => 'a', 'b' => 'b', 'c' => 'c', 'd' => 'd',
'e' => 'e', 'f' => 'f', 'g' => 'g', 'h' => 'h', 'i' => 'i',
'j' => 'j', 'k' => 'k', 'l' => 'l', 'm' => 'm', 'n' => 'n',
'o' => 'o', 'p' => 'p', 'q' => 'q', 'r' => 'r', 's' => 's',
't' => 't', 'u' => 'u', 'v' => 'v', 'w' => 'w', 'x' => 'x',
'y' => 'y', 'z' => 'z', '-' => '-'
);

$new = '';
foreach ($str as $char){
if (isset ($arr[$char]))
$new .= $arr[$char];
else
$new .= $arr;
}
return $new;
}

$str="Codebit.cn - 聚合小段精华代码";
echo fulltohalf($str);
?>

错误信息:

enter image description here

方法二:

<?php
function fulltohalf($Str) {
$Queue = Array(
'0' => '0', '1' => '1', '2' => '2', '3' => '3', '4' => '4',
'5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9',
'A' => 'A', 'B' => 'B', 'C' => 'C', 'D' => 'D', 'E' => 'E',
'F' => 'F', 'G' => 'G', 'H' => 'H', 'I' => 'I', 'J' => 'J',
'K' => 'K', 'L' => 'L', 'M' => 'M', 'N' => 'N', 'O' => 'O',
'P' => 'P', 'Q' => 'Q', 'R' => 'R', 'S' => 'S', 'T' => 'T',
'U' => 'U', 'V' => 'V', 'W' => 'W', 'X' => 'X', 'Y' => 'Y',
'Z' => 'Z', 'a' => 'a', 'b' => 'b', 'c' => 'c', 'd' => 'd',
'e' => 'e', 'f' => 'f', 'g' => 'g', 'h' => 'h', 'i' => 'i',
'j' => 'j', 'k' => 'k', 'l' => 'l', 'm' => 'm', 'n' => 'n',
'o' => 'o', 'p' => 'p', 'q' => 'q', 'r' => 'r', 's' => 's',
't' => 't', 'u' => 'u', 'v' => 'v', 'w' => 'w', 'x' => 'x',
'y' => 'y', 'z' => 'z', '-' => '-'
);

return preg_replace("/([\xA3][\xB0-\xB9\xC1-\xDA\xE1-\xFA])/e","\$Queue[\\1]", $Str);

}

$str = "Codebit.cn - 聚合小段精华代码"; 
echo $str;
echo "<br />";
echo fulltohalf($str);
?>

错误信息:

enter image description here

如何修复其中两个?

我解决了方法一的问题,固定代码如下。

<?php
function fulltohalf($str){
$arr=Array(
'0' => '0', '1' => '1', '2' => '2', '3' => '3', '4' => '4',
'5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9',
'A' => 'A', 'B' => 'B', 'C' => 'C', 'D' => 'D', 'E' => 'E',
'F' => 'F', 'G' => 'G', 'H' => 'H', 'I' => 'I', 'J' => 'J',
'K' => 'K', 'L' => 'L', 'M' => 'M', 'N' => 'N', 'O' => 'O',
'P' => 'P', 'Q' => 'Q', 'R' => 'R', 'S' => 'S', 'T' => 'T',
'U' => 'U', 'V' => 'V', 'W' => 'W', 'X' => 'X', 'Y' => 'Y',
'Z' => 'Z', 'a' => 'a', 'b' => 'b', 'c' => 'c', 'd' => 'd',
'e' => 'e', 'f' => 'f', 'g' => 'g', 'h' => 'h', 'i' => 'i',
'j' => 'j', 'k' => 'k', 'l' => 'l', 'm' => 'm', 'n' => 'n',
'o' => 'o', 'p' => 'p', 'q' => 'q', 'r' => 'r', 's' => 's',
't' => 't', 'u' => 'u', 'v' => 'v', 'w' => 'w', 'x' => 'x',
'y' => 'y', 'z' => 'z', '-' => '-'
);

$new = '';
preg_match_all('/./u', $str, $results);
$str=$results[0];
foreach ($str as $char){
if (isset ($arr[$char]))
$new .= $arr[$char];
else
$new .= $char;
}
return $new;
}

echo fulltohalf("Codebit.cn - 聚合小段精华代码");
?>

最佳答案

一行代码:

$str="Codebit.cn - 聚合小段精华代码";
$str = mb_convert_kana($str, "rnaskhc", 'UTF-8');
echo $str;

Codebit.cn - 聚合小段精华代码

成为

Codebit.cn - 聚合小段精华代码

并且您可以保留字母的大小写作为奖励。

引用:http://php.net/mb_convert_kana

关于php - 为什么不能将所有字符从全角字符更改为半角字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29538910/

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