如何将八进制转义\ 303 \ 241解码为原始utf-8字符?

时间:2019-01-21 15:34:02

标签: php encoding

我有一个CSV文件要导入到数据库中,我发现在很多地方,这种方式已将字符串编码为“ Mete y S \ 303 \ 241cala”。

我想将其编码为原始字符串,即“ Mete ySácala”。

参考:https://mothereff.in/utf-8

我使用了以下功能

iconv(mb_detect_encoding(“ Me y S \ 303 \ 241cala”,mb_detect_order(),true),“ UTF-8”,“ Mete y S \ 303 \ 241cala”);

这很完美!

我正在通过ExcelReader读取文件并循环播放内容。

但是当我使用实际变量时,它不会转换它。

//循环

iconv(mb_detect_encoding($ rec ['title'],mb_detect_order(),true),“ UTF-8”,$ rec ['title']);

不适用于循环变量,可能是正斜杠的问题。

2 个答案:

答案 0 :(得分:0)

PHP标准库有一个解决方案:

$decodedString = utf8_decode($string);

答案 1 :(得分:0)

stripcslashes()不仅可以去除反斜杠,还可以处理\r\n\123字符转义。因为这显然是CSV编码器产生的。

  

我使用了以下功能

iconv(mb_detect_encoding("Mete y S\303\241cala", mb_detect_order(), true), "UTF-8","Mete y S\303\241cala");
     

这很完美!

那不是那里发生的事情。当PHP在双引号\303\241字符串表达式中遇到"Mete y S\303\241cala"时,会将其解释为原始字符串字节。 iconvmb_*都没有在这里做任何事情。

与使用单引号的字符串'Mete y S\303\241cala'或从文件读取的某些文字数据形成对比。在这种情况下,您必须自己解码八进制数(上述功能)。

无论如何,这不是“ UTF-8编码”。这是在顶部编码的附加字节序列。