V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
ZiShuo
V2EX  ›  PHP

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

  •  
  •   ZiShuo · Jan 1, 2016 · 4724 views
    This topic created in 3769 days ago, the information mentioned may be changed or developed.

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

    HTTP://编码后是 HTTP%3A%2F%2F ,而我需要的是 HTTP%3a%2f%2f,其它不变。
    iyeatse
        24
    iyeatse  
       Jan 2, 2016
    @ZiShuo 没写过 php ,不过这个不是一个正则替换就能解决的事?
    nmgwddj
        25
    nmgwddj  
       Jan 2, 2016
    @HanSonJ 我还在想 C 语言什么时候可以直接给一个变量赋值字符串了。
    pine
        26
    pine  
       Jan 8, 2016
    @ZiShuo 说人话就是,你打的字让人不懂你到底想干嘛,你仔细看看你发的帖子,如果 http 不符合你的要求,你的要求是什么?而且专门处理 http 不复杂啊
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1004 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 75ms · UTC 19:38 · PVG 03:38 · LAX 12:38 · JFK 15:38
    ♥ Do have faith in what you're doing.