【问题标题】:php copy not working with utf8 characters?php 副本不适用于 utf8 字符?
【发布时间】:2011-10-11 09:14:35
【问题描述】:

我正在使用 php copy() 函数并得到奇怪的结果,这让我在谷歌上搜索并找不到关于这个主题的任何内容,所以我的结论是 php 的 copy($src, $dest) 函数中不能包含 utf8 字符$src 和 $dest,但只是想让你们确认一下 - 或者你知道解决这个问题的方法吗?

最终结论: @azat:我感谢您的回答并试图提供帮助-但总而言之,现在我发现我错了!这些文件(下载到我的计算机时确实有正确的字符!但是当我从我的 WinSCP 查看文件夹的内容时,我看到它们都被打乱了,我认为这是因为 WinSCP。无论如何,我会将你的答案标记为正确你是唯一一个帮助我的人,最终让我意识到我的错误。

edit: 我运行的系统是 Linux,php 文件中的命令示例如下:

<?php
    copy ("images/test.png", "images/myTestŽĆČĐŠžćčđš.png");
?>

edit2:

#>uname -a
Linux litij.avalon.hr 2.6.18-274.3.1.el5 #1 SMP Tue Sep 6 20:13:52 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux

#>cat /etc/mtab
/dev/root /lib virtfs defaults 0 0
/dev/root /opt virtfs defaults 0 0
/dev/root /lib64 virtfs defaults 0 0
/dev/root /usr/lib virtfs defaults 0 0
/dev/root /usr/lib64 virtfs defaults 0 0
/dev/root /usr/sbin virtfs defaults 0 0
/dev/root /usr/share virtfs defaults 0 0
/dev/root /usr/bin virtfs defaults 0 0
/dev/root /usr/man virtfs defaults 0 0
/dev/root /usr/X11R6 virtfs defaults 0 0
/dev/root /usr/kerberos virtfs defaults 0 0
/dev/root /usr/libexec virtfs defaults 0 0
/dev/root /usr/local/bin virtfs defaults 0 0
/dev/root /usr/local/share virtfs defaults 0 0
/dev/root /usr/local/Zend virtfs defaults 0 0
/dev/root /usr/local/IonCube virtfs defaults 0 0
/dev/root /usr/include virtfs defaults 0 0
/dev/root /usr/local/lib virtfs defaults 0 0
/dev/root /var/spool virtfs defaults 0 0
/dev/root /var/lib virtfs defaults 0 0
/dev/root /var/cpanel virtfs defaults 0 0
/dev/root /usr/local/cpanel/Cpanel virtfs defaults 0 0
/dev/root /var/run virtfs defaults 0 0
/dev/root /var/log virtfs defaults 0 0
/dev/root /tmp virtfs defaults 0 0
/dev/root /dev virtfs defaults 0 0
/dev/root /bin virtfs defaults 0 0
/dev/root /usr/local/apache/domlogs virtfs defaults 0 0
/dev/root /etc/mail virtfs defaults 0 0
/dev/root /home/fotoctim virtfs defaults 0 0
none /proc proc rw 0 0

值得注意的是我的复制命令没有给出任何错误:(

if (copy($src, $dest)){
    echo  "File <b>successfully</b> copied to $dest<br/>";
}
else{
    echo "File <b>was not!</b> copied to $dest<br/>";
}

【问题讨论】:

  • 这与“php 的 copy() 函数”无关,你知道的。但是关于你的操作系统。
  • 那么你传递给copy()的字符串是什么?
  • 你有什么操作系统?你有什么文件系统?
  • @all:我编辑了帖子,所以现在请看一下。

标签: php


【解决方案1】:

Ext4
LANG=en_US.UTF-8

<?
touch("/tmp/test.png");
copy("/tmp/test.png", "/tmp/myTestŽĆČĐŠžćčđš.png");
azat:~$ ls /tmp/myTestŽĆČĐŠžćčđš.png /tmp/myTestŽĆČĐŠžćčđš.png

所以问题是你有什么文件系统和挂载选项

【讨论】:

  • 感谢您的回答,但您能告诉我如何找到我的文件系统和挂载选项吗?顺便说一句,我在共享主机上,所以我不知道是否可以更改某些设置。
  • cat /etc/mtab,并在此处发布绝对路径。还有uname -a
  • 我更新了我的OP,请看一下。顺便说一句,你会看到我没有收到任何错误。
  • 在这种情况下:可能您的virtfs 不支持此功能。你能从控制台执行这个吗? touch /tmp/myTestŽĆČĐŠžćčđš.png &amp;&amp; ls /tmp/myTestŽĆČĐŠžćčđš.png
  • @szat:看来你是对的,这就是我得到的:/tmp/myTest\256\306\310\320\251\276\346\350\360\271.png
【解决方案2】:

我知道这已经晚了,但是您需要检查包含以下复制脚本的php文件的格式是否为utf-8格式。所以当它复制文件时,它会以相同的格式复制它。这就是我解决问题的方法。

<?php

复制($path,$dest); ?>

【讨论】:

    猜你喜欢
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多