V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ZiShuo
V2EX  ›  PHP

请问如何将下面一段 C 语言代码转换成 PHP

  •  
  •   ZiShuo · 2016-01-01 21:17:04 +08:00 · 4147 次点击
    这是一个创建于 3283 天前的主题,其中的信息可能已经有所发展或是发生改变。

    function urlencode()
    {
    local string="$1";
    local strlen=${#string};
    local encoded="";

    for (( pos=0 ; pos<strlen ; pos++ )); do
    c=${string:$pos:1}
    case "$c" in
    [-_.~a-zA-Z0-9] ) o="${c}" ;;
    * ) printf -v o '%%%02x' "'$c"
    esac
    encoded+="${o}";
    done
    echo "${encoded}";
    }

    以上是 C 语言的经过编码后的特殊符号内容是小写的, PHP 的 urlencode 编码后特殊字符串是大小的,那个变态的网站对特殊字符 url 地址大小写非常敏感。请大神帮忙转换一下。

    26 条回复    2016-01-08 09:58:30 +08:00
    iamfredng
        1
    iamfredng  
       2016-01-01 21:30:04 +08:00
    我反复看了下,总觉得这不是 C 语言。。。这是个 Bash 脚本吧。
    iamfredng
        2
    iamfredng  
       2016-01-01 21:30:55 +08:00
    艹,真是个 Bash 脚本,难怪我脑内的 C 语言处理器无法解析这段代码。摔
    HanSonJ
        3
    HanSonJ  
       2016-01-01 21:33:52 +08:00
    @iamfredng 我还一直在想 C 语言什么时候能够 local 定义变量了。。。
    liuhaotian
        4
    liuhaotian  
       2016-01-01 21:36:38 +08:00
    @HanSonJ 这是一个 function 类型的函数😁
    orvice
        5
    orvice  
       2016-01-01 23:31:23 +08:00
    还以为是自己 c 语言白学了。。
    Kilerd
        6
    Kilerd  
       2016-01-01 23:36:21 +08:00
    又是伸手党!!表示毫无好感。
    pynix
        7
    pynix  
       2016-01-01 23:37:22 +08:00
    伸手党
    mikicomo
        8
    mikicomo  
       2016-01-01 23:42:13 +08:00   ❤️ 1
    block
    gdtv
        9
    gdtv  
       2016-01-01 23:48:28 +08:00
    php 就是从 C 语言来的,我学了 C 学了 PHP ,居然看不懂楼主的代码,这真的是 C 吗?我读书少,别骗我。
    MrZephyrus
        10
    MrZephyrus  
       2016-01-02 00:37:49 +08:00
    @orvice + 1
    vigoss
        11
    vigoss  
       2016-01-02 02:27:32 +08:00
    大家不要这么深恶意,我来帮楼主翻译。
    function php_urlencode($url) {
    return urlencode($url);
    }
    vigoss
        12
    vigoss  
       2016-01-02 02:28:58 +08:00
    function php_urlencode($url) {
    return strtolower(urlencode($url));
    }
    EmarsXHY
        13
    EmarsXHY  
       2016-01-02 03:35:12 +08:00
    。。。有点无语,第一语言没搞清楚,第二请说人话=。=
    580a388da131
        14
    580a388da131  
       2016-01-02 06:47:24 +08:00
    看起来都是挺基本的东西。
    aprikyblue
        15
    aprikyblue  
       2016-01-02 08:29:34 +08:00
    我 C 语言白学了
    czheo
        16
    czheo  
       2016-01-02 09:58:14 +08:00
    我中文白学了
    ooxxcc
        17
    ooxxcc  
       2016-01-02 10:34:53 +08:00
    我还以为是 c16 新标准哪来的那么多新用法……
    Cynic222
        18
    Cynic222  
       2016-01-02 10:40:59 +08:00 via iPhone
    我还在想哪来的 esac...
    wizardforcel
        19
    wizardforcel  
       2016-01-02 21:57:15 +08:00 via Android
    你需要 strtolower()
    ZiShuo
        20
    ZiShuo  
    OP
       2016-01-02 22:00:28 +08:00
    @iamfredng 是的,是 Bash 语言,我一直认为 Bash 和 C 没区别。菜鸟勿怪!
    ZiShuo
        21
    ZiShuo  
    OP
       2016-01-02 22:01:15 +08:00
    @Kilerd 表示真不是伸手党,为了解决这个问题我搞了一天了。
    ZiShuo
        22
    ZiShuo  
    OP
       2016-01-02 22:02:33 +08:00
    @EmarsXHY 请问哪里不是人话了?语言没搞清楚我承认是我弄错了。
    ZiShuo
        23
    ZiShuo  
    OP
       2016-01-02 22:06:01 +08:00
    @vigoss 你这样会将所有的大小写字符转换成小写,而我只是需要将特殊的字符转换成小写,比如:

    HTTP://编码后是 HTTP%3A%2F%2F ,而我需要的是 HTTP%3a%2f%2f,其它不变。
    iyeatse
        24
    iyeatse  
       2016-01-02 22:26:53 +08:00
    @ZiShuo 没写过 php ,不过这个不是一个正则替换就能解决的事?
    nmgwddj
        25
    nmgwddj  
       2016-01-02 23:14:15 +08:00
    @HanSonJ 我还在想 C 语言什么时候可以直接给一个变量赋值字符串了。
    pine
        26
    pine  
       2016-01-08 09:58:30 +08:00
    @ZiShuo 说人话就是,你打的字让人不懂你到底想干嘛,你仔细看看你发的帖子,如果 http 不符合你的要求,你的要求是什么?而且专门处理 http 不复杂啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   981 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 19:58 · PVG 03:58 · LAX 11:58 · JFK 14:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.