fsk33 2023-04-19 14:38 采纳率: 73.5%
浏览 57
已结题

php超链接的路径中有中文时解析错误

我用PHP写的网页程序中,需要打开/读取一个目录(这个目录/路径存在数据库的“imgPath1”字段中),数据库里存储的路径中的“\”是转换成了“$”的,同时路径里有中文字符,如这个:“d:$20230418x$央央20234187.rar1\”,我用以下代码,始终无法完整获得路径,主要是里面的中文显示为其它字符,如通过utf-8和gbk转换后,读取为“d:\20230418x%E5%A4%AE%E5%A4%AE20234187.rar1\”,里面的中文被显示成了字母数字和百分号,所以打不开路径。

<a href="raexe://<?php echo iconv("utf-8","GBK",str_replace("$","\\",$row_rsdb['imgPath1'])); ?>" target="_blank"> 阅片</a>

代码里的raexe大家不用管,是一个调用本地程序设置,将“$”转换成“\”也做出来了,就是中文解码问题。
主要想解决的问题:正确获取数据库imgPath1字段里的路径信息(主要是中文),需要代码。

  • 写回答

7条回答 默认 最新

  • 「已注销」 2023-04-19 14:43
    关注

    引用new bing部分回答作答:
    这个问题可能是因为在处理中文路径时,未正确地进行字符编码转换,导致中文被显示为乱码或转义字符。

    在你的代码中,使用了 iconv() 函数将字符编码从 UTF-8 转换为 GBK,但这种方法可能会导致一些不可预知的问题。更好的做法是使用 PHP 内置的 mb_convert_encoding() 函数,它支持更多的字符集和语言。

    另外,由于路径中的 \ 符号已经被转换为 $,所以在处理路径时需要先将 $ 转换回 \。

    以下是一种可能的解决方案:

    <?php
    $path = str_replace('$', '\\', $row_rsdb['imgPath1']);
    $path = mb_convert_encoding($path, 'GBK', 'UTF-8');
    ?>
    
    <a href="raexe://<?php echo $path; ?>" target="_blank">阅片</a>
    
    

    这里先将 $ 转换回 \,然后使用 mb_convert_encoding() 函数将路径从 UTF-8 编码转换为 GBK 编码。最后使用 $path 变量作为 href 属性的值即可。

    希望这可以帮助你解决问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月27日
  • 修改了问题 4月19日
  • 创建了问题 4月19日