繁体   English   中英

如何使用PHP截断字符串中的非ASCII字符

[英]How to truncate non-ascii characters from string using PHP

我有以下字符串作为文件名

$string = 'recyclage plétre francin.jpg';

并尝试使用以下代码

echo preg_replace('/[^a-z0-9|^.]/i', '_', iconv("UTF-8","ISO-8859-1//TRANSLIT",$string));

因为文件名中有一个特殊的(非ASCII)字符,所以在使用PHP上传文件时会创建垃圾字符。

我想要的是用特定的Ascii字符替换任何unicode(非ascii)字符。 我想保留所有受支持的Ascii字符并删除非ascii字符。 我也想保留/\\斜线,因为文件名中的目录分隔符将给出根路径。

编辑:(以下未解决)

我在使用recyclage plƒtre francin.JPG时遇到问题,请显示显示recyclage pl类的输出的f字符已截断.JPG 实际上,文件名是recyclage plâtre francin而在我调试时,文件名显示recyclage plƒtre francin.JPG ,其余部分都写在此之后。 任何的想法?

当我尝试转换tri et recyclage du plâtre但在阅读时显示tri et recyclage du plâtre ,转换后显示tri et recyclage du pl^atre

任何帮助将不胜感激。

如果使用TRANSLIT修饰符,它将替换所有无法在目标编码中显示的字符。 由于é 可以用ISO-8859-1表示,因此被编码为ANSI代码0xE9

我想你想要这样的东西:

$string = 'recyclage plétre francin.jpg';
echo iconv("UTF-8","ASCII//TRANSLIT",$string);

iconv recyclage pletre francin.jpg的结果是: recyclage pletre francin.jpg

这是我的问题的解决方案。 终于我可以看到转换了。 一些Unicode字符被替换为一些Ascii字符。 但是毕竟现在一切都很好。

function toASCII($str)
{
    $accent   = 'ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕƒ';
    $noaccent = 'SOZsozYYuaaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRra';
    $string = strtr(utf8_decode($string),utf8_decode($accent),$noaccent);
    return strtr($string, $accent, $noaccent);
}
Check this code 

<?php

$string = 'recyclage plétre francin.jpg';
$str = preg_replace('/[^\x20-\x7E]/', '', $string);
echo $str;
?>

您可以使用简单的方法来删除除az,0-9或空格之外的所有字符。

// Remove all characters that are not the separator, a-z, 0-9, or whitespace
$string = preg_replace('![^'.preg_quote('-').'a-z0-_9\s]+!', '', strtolower($string));
// Replace all separator characters and whitespace by a single separator
$string = preg_replace('!['.preg_quote('-').'\s]+!u', '-', $string);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM