簡體   English   中英

編碼重音和特殊字符PHP

[英]Encode accents and special characters PHP

我的php上傳imgs有點問題。

我正在制作一個網站,用戶可以在其中查看上升的圖像的預覽,但是如果圖像包含重音符號,則會出現錯誤,例如“Nenúfares.jpg”變為“Nenúfares.jpg.jpg”

我該如何解決?

曾經考慮過要在警報進入時采用某種方法進行選擇。(JS)包含特殊字符(例如重音符號)等...

密碼

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>

非常感謝你!

除了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哈希值,並將您的文件名作為新文件名,從而使您更有機會確保您的文件名在系統上是唯一的,並且擺脫了“特殊字符”。

我想做的一件事是還使用用戶唯一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

您使用的是UTF-8還是ISO-8859-1? 您需要使用數據庫的相同編碼。 假設您的頁面是UTF-8,數據庫是Latin-1(ISO 8859-1 / 2),則需要使用utf8_encode轉換數據。

我認為您可以解決編碼問題,迫使您的標頭如下所示:

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

昨天我解決了這樣的編碼問題。

希望能幫助到你。

您可以迭代並普通字符替換重音符號:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM