php文件内容亚洲字符文件名编码

php文件内容亚洲字符文件名编码,php,character-encoding,Php,Character Encoding,我正试图从维基百科上获取这些图片。如果你得不到免费授权媒体,它有什么好处?原稿是 如果你把这个 在firefox中,它将立即转换为 http://upload.wikimedia.org/wikipedia/commons/2/26/的-bw.png 这样,当您保存图像时,它将另存为的-bw.png 够简单吧?现在如何让php做到这一点?只是猜测一下,我尝试了utf8_解码($fileName)。。但是拼错了汉字 $src= "http://upload.wikimedia.org/wikip

我正试图从维基百科上获取这些图片。如果你得不到免费授权媒体,它有什么好处?原稿是

如果你把这个

在firefox中,它将立即转换为

http://upload.wikimedia.org/wikipedia/commons/2/26/的-bw.png

这样,当您保存图像时,它将另存为的-bw.png

够简单吧?现在如何让php做到这一点?只是猜测一下,我尝试了utf8_解码($fileName)。。但是拼错了汉字

$src= "http://upload.wikimedia.org/wikipedia/commons/2/26/%E7%9A%84-bw.png";  
$pngData = file_get_contents($src);  
$fileName = basename($src);  
file_put_contents($fileName, $pngData);

非常感谢您的帮助,因为我真的不知道从这里到哪里去。

您是否尝试过
url\u decode()

<?php
$url = 'http://upload.wikimedia.org/wikipedia/commons/2/26/%E7%9A%84-bw.png';
$parts = explode('/', $url);
$title = $parts[count($parts)-1]; //get last section

$title = urldecode($title);
?>

您是否尝试过
url\u decode()

<?php
$url = 'http://upload.wikimedia.org/wikipedia/commons/2/26/%E7%9A%84-bw.png';
$parts = explode('/', $url);
$title = $parts[count($parts)-1]; //get last section

$title = urldecode($title);
?>

Squirrelmail在源代码中包含一个很好的函数,用于将unicode转换为实体:

<?php 
function charset_decode_utf_8 ($string) { 
       /* Only do the slow convert if there are 8-bit characters */ 
     /* avoid using 0xA0 (\240) in ereg ranges. RH73 does not like that */ 
     if (! ereg("[\200-\237]", $string) and ! ereg("[\241-\377]", $string)) 
         return $string; 

     // decode three byte unicode characters 
     $string = preg_replace("/([\340-\357])([\200-\277])([\200-\277])/e",        
     "'&#'.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'",    
     $string); 

     // decode two byte unicode characters 
     $string = preg_replace("/([\300-\337])([\200-\277])/e", 
     "'&#'.((ord('\\1')-192)*64+(ord('\\2')-128)).';'", 
     $string); 

     return $string; 
 } 
?>

Squirrelmail在源代码中包含一个很好的函数,用于将unicode转换为实体:

<?php 
function charset_decode_utf_8 ($string) { 
       /* Only do the slow convert if there are 8-bit characters */ 
     /* avoid using 0xA0 (\240) in ereg ranges. RH73 does not like that */ 
     if (! ereg("[\200-\237]", $string) and ! ereg("[\241-\377]", $string)) 
         return $string; 

     // decode three byte unicode characters 
     $string = preg_replace("/([\340-\357])([\200-\277])([\200-\277])/e",        
     "'&#'.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'",    
     $string); 

     // decode two byte unicode characters 
     $string = preg_replace("/([\300-\337])([\200-\277])/e", 
     "'&#'.((ord('\\1')-192)*64+(ord('\\2')-128)).';'", 
     $string); 

     return $string; 
 } 
?>

brr。。是的,我试过了,但还是用错了字。我从$src复制url,粘贴到firefox中,得到文件名正确的文件。用php我可以得到相同的文件,但文件名不同,另一个汉字。更新了问题来想想,我想你已经回答了我的问题。至少给我指出正确的方向。我将重新措辞这个问题,并发布一个新的。。它是urldecode()而不是url_decode();顺便说一句,我要做的是获取包含标题的部分,然后在该部分上运行urldecode。检查上面编辑的代码(不确定是否有效,未测试。然后确保使用utf8或类似的字符,以免字符与ascii字符混淆Hanks,尝试了,仍然存在相同的问题。首先,我认为问题是文件内容无法使用传递的文件名写入文件。现在我看到它返回解码部分这是乱七八糟的…我进一步检查了这个brr…是的,尝试了,仍然得到了错误的字符。我从$src复制了url,粘贴到firefox,得到了文件名正确的文件。使用php,我得到了相同的文件,但有不同的文件名,另一个中文字符。更新了问题。来想想,我想你已经回答了我回答了我的问题。至少给我指出了正确的方向。我会重新措辞这个问题,然后发布一个新的问题。顺便说一句,它是urldecode()而不是url_decode();所以我要做的是得到标题在其中的部分,然后在该部分上运行urldecode。检查上面编辑的代码(不确定是否有效,未测试。然后确保使用utf8或类似的字符,以免字符与ascii字符混淆Hanks,尝试了,仍然存在相同的问题。首先,我认为问题是文件内容无法使用传递的文件名写入文件。现在我看到它返回解码部分这真是乱七八糟。我检查了这个,谢谢。试过了,返回的字符与上面的urldecode相同。谢谢。试过了,返回的字符与上面的urldecode相同。