编码重音和特殊字符PHP

时间:2014-04-10 11:45:48

标签: javascript php jquery

我有一点问题,我上传imgs。

我正在创建一个网站,用户可以在其中查看上升图像的预览,但如果图像包含重音符号错误,例如“Nenúfares.jpg”就会变成“Nenúfares.jpg.jpg”

我如何解决这个问题?

考虑过在警报进来时选择一些方法来选择。(JS)包含重音等特殊字符...

Mi Code

PHP:

$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 20000000)
&& in_array($extension, $allowedExts))
{
$ruta ="tmp/".$_FILES["file"]["name"];
  $rutafinal =str_replace(" ","_",$ruta); //Change " " for "_"
  move_uploaded_file($_FILES["file"]["tmp_name"],$rutafinal);
  echo $rutafinal;


  }
else
  {
     echo "Archivo no valido";
  } 

JavaScript(AJAX):

function previewIMG() {
    var formData = new FormData();
    var file = $("#fileselectInput")[0].files[0];

    formData.append("file", file);
    formData.append("name", file.name);
    var url ="subir_img_producto.php";
    if (window.XMLHttpRequest){
        xmlhttp=new XMLHttpRequest();
    }else{
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    var http = new XMLHttpRequest();
    http.open("POST", url, true);        
    http.send(formData);

    http.onreadystatechange = function() {
        if(http.readyState == 4 && http.status == 200) {
            var result= http.responseText;
            var comprobar= 'tmp';
            if (result.indexOf(comprobar) !== -1) {
                document.getElementById('cuadroIMG').src = http.responseText;
            }else{
                alert(http.responseText);
            }
        }
    }
} 

HTML:

<form id="form">
        <input type="file" id="fileselectInput" onchange="previewIMG()"><br>
    </form>

非常感谢!

3 个答案:

答案 0 :(得分:2)

除了Amauri已经很好地涵盖了utf-8问题之外,您可能想要做的另一件事是:

替换

$ruta ="tmp/".$_FILES["file"]["name"];
$rutafinal =str_replace(" ","_",$ruta); //Change " " for "_"

$ruta      = "tmp/".$_FILES["file"]["name"];
$fileExtension = substr($ruta,stripos ($ruta,'.'));
$rutafinal = 'tmp/' . md5(time() . $ruta).'.'.$fileExtension;

这将从当前时间戳创建一个md5哈希,并将您的文件名作为新文件名,从而更有可能让您的文件名在您的系统中是唯一的,并且可以摆脱&#34;特殊字符&# 34。

我喜欢做的一件事是使用用户唯一ID(如果存在)作为一个补充,以防止两个用户上传相同文件时出现问题(可能会发生很多文件名,如avatar.jpeg等)。

毕竟,md5不是无冲突的,所以你可能需要在这里做一些额外的工作。 提高机会的一种方法是使用时间戳驱动的目录:

$rutafinal = 'tmp/' . date("Y/m/d/h/i", time()) . '/'. md5(time() . $ruta).'.'.$fileExtension;

例如,这将把你的文件放在

<yourimageuploadfolder>/2014/04/10/14/04/5eb63bbbe01eeed093cb22bb8f5acdc3.jpg

答案 1 :(得分:1)

您使用的是UTF-8还是ISO-8859-1?您需要使用相同的数据库编码。假设您的页面是UTF-8而您的数据库是Latin-1(ISO 8859-1 / 2),则需要使用utf8_encode转换数据。

我认为你可以解决你的编码问题,迫使你像:

header('Content-type: text/html; charset=utf-8');

昨天我解决了我的编码问题。

希望它有所帮助。

答案 2 :(得分:0)

您可以通过普通字符迭代和replace重音:

$name = str_replace("ú", "u", $name);