duanlinjian5819 2012-02-10 02:23
浏览 57
已采纳

在变量中转换特殊字符以用于URL使用

So, this is the problem, i think everything is ok with this function, but URLs like:

reparações

are showing always as "reparaa-a-es".

The expected result should be "reparacoes"

EDIT:

So, the solution was simple, it seems php has a native function that does what i need:

rawurlencode ( string $str )


function generateSafeUrls($url = '') {
    ## normalize accented characters
    $url = strtr($url, "\xA1\xAA\xBA\xBF\xC0\xC1\xC2\xC3\xC5\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD8\xD9\xDA\xDB\xDD\xE0\xE1\xE2\xE3\xE5\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF8\xF9\xFA\xFB\xFD\xFF", "_ao_AAAAACEEEEIIIIDNOOOOOUUUYaaaaaceeeeiiiidnooooouuuyy"); 
    ## make sure its only english and dashes
    $url3 = preg_replace("/[^A-Za-z0-9_-]+/", "_", $url);
    ## return safe url
    return($url3);
}

What should be the problem?

Thanks guys.

  • 写回答

4条回答 默认 最新

  • dptsivmg82908 2012-02-10 02:51
    关注

    Try this on (using UTF8 decoding rather than trying to declare all the hexadecimals):

    function generateSafeUrls($url = ''){
       $bad = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';
       $good = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';  
       $url= strtr(utf8_decode($url), utf8_decode($bad), $good);
       return preg_replace("/[^A-Za-z0-9_-]+/", "_", $url);
    }
    

    However, as Conrad Shultz notes in comments, you don't necessarily need to do this... simple urlencode()ing should be fine... if you want cleaner looking urls, you should run the preg_replace so that the URLs don't have %20 etc, and you should probably strtolower()

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题