我需要找到放在目录中的所有文件的编码.有没有办法找到使用的编码?
该file命令无法执行此操作.
我感兴趣的编码是:ISO-8859-1.如果编码是其他任何东西,我想将文件移动到另一个目录.
我在从字符串中删除非utf8字符时遇到问题,这些字符无法正常显示.字符是这样的0x97 0x61 0x6C 0x6F(十六进制表示)
删除它们的最佳方法是什么?正则表达式还是其他什么?
我有一个脚本,它将多个文件合并为一个,当其中一个文件具有UTF8编码时,它会中断.我认为我应该utf8_decode()在读取文件时使用该函数,但我不知道如何判断哪个需要解码.
我的代码基本上是:
$output = '';
foreach ($files as $filename) {
$output .= file_get_contents($filename) . "\n";
}
file_put_contents('combined.txt', $output);
Run Code Online (Sandbox Code Playgroud)
目前,在UTF8文件的开头,它在输出中添加了这些字符: 
我有从第三方网站获取的Feed,有时我必须申请utf8_decode并且有时候utf8_encode才能获得所需的可见输出.
如果错误地将相同的东西应用了两次/或者使用了错误的方法我会得到一些更难看的东西,这就是我想要改变的东西.
如何检测何时应用于字符串?
UPDATE
实际上内容返回UTF-8,但内部有部分不返回.
我想检测文件系统编码的操作系统是默认的,比如不同语言版本的Windows操作系统,它会使用不同的编码(iso-8859-1,ms950,big5,gb2312..etc)那么如何检测不同的操作系统在PHP编码?任何的想法?谢谢.
基本事实:
$algorithm = MCRYPT_BLOWFISH;
$mode = MCRYPT_MODE_CBC;
$randSource = MCRYPT_DEV_URANDOM;
Run Code Online (Sandbox Code Playgroud)
注意 这不是严格的编码问题.
语境:
CentOS 7,Apache 2.4.12和PHP 5.6.20.
我正在制作一封HTML电子邮件,其中包含"验证您的电子邮件地址"链接,可以完成注册过程.我的虚拟专用服务器上的所有内容都是UTF-8,所有表单和查询字符串输入都使用多字节(mb)函数进行处理.
背景
作为一个实验(我知道mcrypt库的年龄和状态),我试图解密Blowfish加密的查询字符串参数.假设在上升的过程中,加密序列工作正常,我收到带有链接的电子邮件.
在下来的过程中,hmac_hash()签名(SHA-512,仅用于此实验)正在运行,我能够将每个独立消息(32个字符)与其哈希校验和(128个字符)分开.分离的消息部分的Base64解码正在工作.对于每个参数,我留下复合密文,其中复合密文等于IV +基密码文本.假设我使用一个版本的substr(),以获得IV和基底密文独立地(这是意料之中的).
问题
PHP: Warning mcrypt_generic_init(): Iv size is incorrect; supplied length: 12, needed: 8
Run Code Online (Sandbox Code Playgroud)
假设我已经梳理了PHP手册和Stackoverflow.假设我已经看过类似的其他问题,但不完全像这个问题.假设我在互联网上搜索无济于事.假设我有足够的经验来mb_string正确设置.假设当我遇到当前问题时我会处理mcrypt填充.
多字节问题会干扰解密吗?
base64编码可以IV + base cipher text破坏IV吗?
base64填充可能是个问题吗?
我应该指定更具体的MCRYPT_BLOWFISH_*吗?
为什么河豚IV大小报告8个字节,但很少产生8字节IV?
我应该使用哪个substr(),substr()或者mb_substr(),对于倾向于使所有UTF-8并将所有其他输入作为多字节UTF-8处理的设置.我知道这是一个奇怪的问题,但所有的PHP手册mycrypt解密序列示例都使用substr(),没有使用mb_substr().我的网站上的所有内容都尽可能使用mb_functions,我不介意使用substr()它,如果它解决了我的问题,但它没有解决它.当我使用时mb_substr(),我收到以下警告.
PHP: Warning mcrypt_generic_init(): Iv …Run Code Online (Sandbox Code Playgroud) 我使用PHP访问旧机器上的数据并输出它们.
腻子显示:
??????????????????
?NONE.
??????????????????
Run Code Online (Sandbox Code Playgroud)
它是一种奇怪的格式,试图以更干净的方式显示数据
PHP echo-ed chrome显示:
??????
?NONE. ?
??????
Run Code Online (Sandbox Code Playgroud)
我试过了:
$Str1 = str_replace("?","",$Str1);
Run Code Online (Sandbox Code Playgroud)
但它并没有过滤掉它们.输出已经是8.
有谁知道如何过滤掉这些东西?也许确定什么是PHP?
是否可以将文件转换为UTF-8?
如果我在提交后有权访问该文件
$_FILES['file']['tmp_name']
Run Code Online (Sandbox Code Playgroud)
注意:用户可以使用任何类型的字符集上传CSV文件,我通常会遇到一个未知的8位字符集.
我试试
$row = array();
$datas = file($_FILES['file']['tmp_name']);
foreach($datas as $data) {
$data = mb_convert_encoding($data, 'UTF-8');
$row[] = explode(',', $data);
}
Run Code Online (Sandbox Code Playgroud)
但问题是,这段代码删除了单引号等特殊字符.
我的第一个问题是htmlspecialchars删除数组内的值?
我把它作为补充信息.感谢那些可以提供帮助的人!
我有很多文本文件要上传到运行MediaWiki的wiki.我甚至不知道这是否真的可行,但我想试一试.
每个文本文件的名称都是Wiki页面的标题.
一个文件的一个wiki页面.
我想从程序所在的文件夹中上传所有文本文件.
也许要求你对它进行编码就是要求太多,所以你能告诉我至少应该用哪种语言来试一试吗?
我有一个问题,我正在使用move_uploaded_file()函数上传文件和一些阿拉伯语命名的文件所以我googled问题,但仍然没有答案我使用元标记,我使用Base64编码和一切但仍然无法正常工作.解决办法是什么 ?
<?php
$data_name=$_POST['name'];
$name=base64_encode($_FILES['file']['name']);
$location="../Files/".$course_name."/";
$tmp_name=$_FILES['file']['tmp_name'];
if(move_uploaded_file($tmp_name, $location.$name))
echo"OK";
?>
Run Code Online (Sandbox Code Playgroud) 我有脚本读取远程文件内容并将其写入本地服务器.文件包含字符:ąčęėįšųūž.数据插入本地文件后,UTF-8编码丢失.我的脚本代码:
<?php
$data = file_get_contents('remote_file_address');
echo $data; //encoding is ok
$file = dirname(__FILE__) . '/../downloads/data.csv';
file_put_contents($file,$data); //invalid encoding in data.csv file
?>
Run Code Online (Sandbox Code Playgroud)
我也按照这篇文章的指示(如何以UTF-8格式写文件?),但仍然没有好处.
那有什么问题呢?有任何想法吗?
我需要一个函数或一个简单的算法来帮助我将普通字符串转换为utf-8代码
例如:字符串:
hello
????
Run Code Online (Sandbox Code Playgroud)
UTF-8代码:
68 65 6C 6C 6F 0A 0639 0631 0628 064A 0A
Run Code Online (Sandbox Code Playgroud)