Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema en el nombre del archivo al guardar en utf-8

Estas en el tema de Problema en el nombre del archivo al guardar en utf-8 en el foro de PHP en Foros del Web. Hola, antes de nada agradeceros vuestra ayuda. Tengo un problema con los caracteres especiales al guardar un archivo. Pero el problema no esta en el ...
  #1 (permalink)  
Antiguo 15/07/2013, 17:20
Avatar de anderdomingo  
Fecha de Ingreso: mayo-2013
Ubicación: Zarautz
Mensajes: 27
Antigüedad: 10 años, 11 meses
Puntos: 0
Pregunta Problema en el nombre del archivo al guardar en utf-8

Hola, antes de nada agradeceros vuestra ayuda.

Tengo un problema con los caracteres especiales al guardar un archivo.

Pero el problema no esta en el contenido del archivo (eso ya esta logrado) sino en el nombre.

Con php hago que reciba una variable post con el nombre ingrediente y despues de hacer otras tantas cosas debe guardar un archivo .html y otro .jpg con ese nombre.

Hasta aqui bien, pero el problema aparece si se inserta algun ingrediente con caracteres especiales, entonces me he dado cuenta de que no me lo guarda con utf-8 y que los nombres de los archivos .html y .jpg no se guardan bien (por ejemplo, al insertar "hampiñones" sale esto: Champiñones.html).
He intentado usar utf8_encode en la variable post antes de ponerla pero no me funciona....

Supongo que si se puede soluccionar con el archivo .html se podra con el .jpg no?
Por eso he puesto solo el codigo que genera el html que si no seria muy largo

He aqui el codigo:

$nombre_fichero = "../recetas/".$_POST["Ingrediente"].".html";
if (file_exists($nombre_fichero))
{
$borrar = unlink($nombre_fichero);
if($borrar)
{
echo "El archivo " . $nombre_archivo . " se eliminó correctamente <br>";
}
else
{
echo "Error al eliminar " . $nombre_archivo . "<br>";
}
}
$preparacion = nl2br($_POST['Preparacion']);
$status = "";
$carpeta="../images/ingredientes/";
$pagina="<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />";
$pagina.= $preparacion;

$Open = fopen ($nombre_fichero,"a+");
if ($Open)
{
fwrite ($Open,"$pagina");
echo "El archivo " . $nombre_fichero . " se creo correctamente <br>";
}
else
{
echo "Error al crear " . $nombre_fichero . "<br>";
}

Habria alguna manera de que me guardara automaticamente los archivos con la ñ y acentos con fwrite? o tendre que andar modificandolos manualmente...?
  #2 (permalink)  
Antiguo 16/07/2013, 01:55
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Problema en el nombre del archivo al guardar en utf-8

Cita:
He intentado usar utf8_encode en la variable post antes de ponerla pero no me funciona....
Has intentado utf8_decode?

O urlencode

Lo mejor seria elimiar esos nombres raros, seguramente tienes una tabla de ingredientes y esta tendrá un id, luego porque no usas el id....y fuera problemas.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 16/07/2013, 03:14
Avatar de anderdomingo  
Fecha de Ingreso: mayo-2013
Ubicación: Zarautz
Mensajes: 27
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Problema en el nombre del archivo al guardar en utf-8

Gracias por tu tiempo, y por darme otra opcion mas a intentar. Lo de utf8 decode creo que no funciona, lo he intentado asi:

$codificado = utf8_decode($_POST['Ingrediente']);
$nombre_fichero = "../ingrediente/".$codificado.".html";

Creo que lo he intentado bien no? Hice lo mismo con encode pero tampoco funciona...
Como has dicho... Tendre que hacer que los archivos se generen basandose en el numero del registro (hare que tome el nombre de la variable post[Numero]), no creo que tenga ningun problema haciendolo asi. Aunque tambien tendra sus desventajas a la hora de encontrar el archivo.

Muchas gracias

Por cierto... si a alguien se le ocurre como podria hacerse usando post[receta]... Es que voy a empezar a insertar mogollon de registros cuando lo acabe y si es posible me gustaria hacerlo de la manera que se me ocurrio primero, originalmente, esta pensado para que sea asi.
Gracias de nuevo ^_^
  #4 (permalink)  
Antiguo 16/07/2013, 08:52
Avatar de By_George  
Fecha de Ingreso: abril-2009
Ubicación: localhost
Mensajes: 629
Antigüedad: 15 años
Puntos: 19
Respuesta: Problema en el nombre del archivo al guardar en utf-8

De la pagina donde envias el dato debes enviarlo

Código PHP:
//envias la variable asi
$ingrediente=utf8_encode($ingrediente);
//y recibirla en el otro script
$nombre_archivo=utf8_decode($_POST["ingrediente"]); 
si es con urlencode

Código PHP:
//envias la variable asi
$ingrediente=urlencode($ingrediente);
//y recibirla normal
$nombre_archivo=$_POST["ingrediente"]; 
__________________
La estadística es una ciencia que demuestra que si mi vecino tiene dos coches y yo ninguno, los dos tenemos uno.
  #5 (permalink)  
Antiguo 16/07/2013, 11:43
Avatar de anderdomingo  
Fecha de Ingreso: mayo-2013
Ubicación: Zarautz
Mensajes: 27
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Problema en el nombre del archivo al guardar en utf-8

Lo he intentado... pero no se como se podria hacer si la variable se envia desde un formulario.

Aqui el codigo del formulario:
<form action="<?php echo $editFormAction; ?>" method="post" name="form1" id="form1" enctype="multipart/form-data">
<table align="center">
<tr valign="baseline">
<td nowrap="nowrap" align="right">Ingrediente:</td>
<td><input type="text" name="Ingrediente" value="" size="50" /></td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right">Imagen:</td>
<td><input name="archivo" type="file"></td>
</tr>
<tr valign="baseline">
<td nowrap="nowrap" align="right">&nbsp;</td>
<td><input type="submit" value="Insertar ingrediente" /></td>
</tr>
</table>
<input type="hidden" name="MM_insert" value="form1" />
</form>
</div>


Y luego por otro trozo que he puesto al principio lo recibe.

Lo cambio a get y lo hago con un input hidden para que lo envie? No lo he probado, pero entonces dejaria de ser un text input y perderia su funcion:

En pocas palabras: Quiero que el usuario pueda insertar el ingrediente con su nombre y su descripcion (descipcion la cual se convertiria en html y se guardaria en el en la carpeta "/ingredientes" con el nombre del ingrediente insertado).

Esto ya esta conseguido, el problema es que no se como codificar la variable post recibida del formulario y que la reciba de la forma adecuada en utf-8. Te agradezco la ayuda pero como he dicho no sabria como enviarlo en utf-8 a traves del formulario html...

E intentar esto es absurdo... no?


Formulario de envio:
<input type="text" name=<?php utf8_encode ("Ingrediente") ?> />


Codigo php que lo recibe:
$codificado = utf8_decode($_POST['Ingrediente']);
$nombre_fichero = "../ingrediente/".$codificado.".html";

Quiza me estoy haciendo un lio yo? perdon, es para nada soy un experto y esto se me va de las manos -_-
  #6 (permalink)  
Antiguo 16/07/2013, 11:54
Avatar de By_George  
Fecha de Ingreso: abril-2009
Ubicación: localhost
Mensajes: 629
Antigüedad: 15 años
Puntos: 19
Respuesta: Problema en el nombre del archivo al guardar en utf-8

Entonces si es de un input solo deberias usar utf8_decode() donde recibes
__________________
La estadística es una ciencia que demuestra que si mi vecino tiene dos coches y yo ninguno, los dos tenemos uno.
  #7 (permalink)  
Antiguo 16/07/2013, 12:16
Avatar de anderdomingo  
Fecha de Ingreso: mayo-2013
Ubicación: Zarautz
Mensajes: 27
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Problema en el nombre del archivo al guardar en utf-8

Gracias y lo siento, si me hubiera fijado bien no habria hecho falta molestar a dos personas, pues con la primera respuesta ya bastaba, estaba bien, lo que fallaba era otra cosa. No me habia fijado bien.
  #8 (permalink)  
Antiguo 16/07/2013, 15:51
Avatar de anderdomingo  
Fecha de Ingreso: mayo-2013
Ubicación: Zarautz
Mensajes: 27
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: Problema en el nombre del archivo al guardar en utf-8

Listo ya esta subido y todo funciona bien! Gracias!

Por cierto, para los que os encontreis con el mismo problema, a mi al menos me ha pasado asi, creo que os lo debo:

NOMBRAR .JPG CON VARIABLES POST:
En localhost:
Para nombrar los .jpg con variables recibidas por post si hace falta poner utf8_decode(), si no no los caracteres especiales no se codificaran bien.

En remoto:
En este caso no hay que usar utf8_decode(), he tenido que quitarlo a la hora de nombrar el .jpg pues si se dejaba puesto no guardaba los archivos si habia algun caracter especial.
Si no lo habia si lo guardaba pero eso es irrelevante.


NOMBRAR .HTML CON VARIABLES RECIBIDAS POR POST:
Para nombrar archivos .html con una variable recibida por post si que me ha hecho falta poner utf8_decode() en ambos casos, como bien deciais antes recibiendola asi: utf8_decode($_POST['Ingrediente']);



Estoy hablando mas de lo que se pero supongo que sera debido a diferencias en la configuracion del localhost y el remoto.
Ëspero que a alguien le sirva algun dia.

Última edición por anderdomingo; 16/07/2013 a las 18:20 Razón: Intentar convertir el agradecimiento en una futura ayuda a terceros :)

Etiquetas: html, jpg, nombre
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:10.