Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
utf8中的Php字符比较_Php_Utf 8 - Fatal编程技术网

utf8中的Php字符比较

utf8中的Php字符比较,php,utf-8,Php,Utf 8,我正在尝试将所有UTF-8字符转换为普通ASCII字符。我循环遍历字符串的每个字符,并根据字符决定是否必须更改字符。对于ASCII字符,它可以正常工作,但代码不会更改UTF-8字符 以下是我的功能: function toNoUTFChars($inputString){ $stringArray = str_split($inputString); $finalString = ''; foreach ($stringArray as $char) {

我正在尝试将所有UTF-8字符转换为普通ASCII字符。我循环遍历字符串的每个字符,并根据字符决定是否必须更改字符。对于ASCII字符,它可以正常工作,但代码不会更改UTF-8字符

以下是我的功能:

    function toNoUTFChars($inputString){
    $stringArray = str_split($inputString);
    $finalString = '';
    foreach ($stringArray as $char) {
        if($char == 'ě' || $char == 'é'){$finalString .= 'e';
        }else if($char == 'š'){$finalString .= 's';
        }else if($char == 'č'){$finalString .= 'c';
        }else if($char == 'ř'){$finalString .= 'r';
        }else if($char == 'ý'){$finalString .= 'y';
        }else if($char == 'á'){$finalString .= 'a';
        }else if($char == 'í'){$finalString .= 'i';
        }else if($char == ' '){$finalString .= '-';
        }else if($char == 'ú' || $char == 'ů'){$finalString .= 'e';
        }else if($char == 'ň'){$finalString .= 'n';
        }else if($char == 'ť'){$finalString .= 't';
        }else if($char == 'ď'){$finalString .= 'd';
        }else if($char == 'ó'){$finalString .= 'o';
        }else if($char == 'ň'){$finalString .= 'n';
        }else if(ctype_alpha($char)){
            $finalString .= $char;
        }
       }
       return $finalString;
}
输入示例“使用utf8ččč测试输出”

预期输出:“Test-Outputeeeccc-with-utf8ccc”


我得到的输出:“Test-Output-with-utf8”//utf8字符缺失:(

多年来,我尝试了很多东西,但这是在所有情况下对我有效的唯一方法:

function remove_accents($txt) {
    $q = 'EOF'.mt_rand(100000000, 999999999);
    $q = "LC_CTYPE=en_US.utf8 iconv -f UTF-8 -t ASCII//TRANSLIT <<$q\n$txt\n$q";
    return substr(`$q`, 0, -1);
}
函数删除重音($txt){
$q='EOF'。百万兰特(100000000,99999999);

$q=“LCycType=EnU.UTF8ICOF-8UTF-8/T ASCII//平移<代码> StReSpuls不适用于多字节字符。可能需要考虑使用来自Itl扩展的类,例如代码> $FialSnc= TrimeRealTax音译(“ANY拉丁语;拉丁ASCII”,$输入字符串)。;
为什么不使用PHP的内置iconv函数来做同样的事情?@miken32这个remove_accents()函数包含内置iconv()函数调用了一段时间,但有时不能正常工作。这是几年前的事了,所以老实说,我记不起细节。然后,有一段时间它只是iconv二进制调用,然后又有一些字符串无法转换,这就是我添加LC_CTYPE设置的时候。如果您担心性能,可以尝试iconv()调用时,参数与-f和-t开关相同,但我建议您监视字符串转换,尤其是在对从未知源接收的字符串使用函数时。