2012-02-10 5 views
0

URLの使用のための変数で特殊文字を変換し、これは問題であり、私はすべてがこの機能にOKだと思いますが、のようなURL:だから、

がreparações

がreparaa--ES」として常に表示されています"

期待される結果は、 "reparacoes" でなければなりません

EDIT:

ので、解決策は簡単だった、それはPHPは は何が必要ないというのネイティブ機能を持っているようだ:

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); 
} 

どのような問題がありますか?

ありがとうございます。

+0

を無関係 - 'strtolower(チャック)は'私はあなたの質問を理解することはできません – Joe

+0

、どのようreparações' 'のようなURLが表示されなければなりませんか? –

+0

は "reparacoes"である必要があります – Souza

答えて

1

(UTF8デコードを使用してのではなく、すべての十六進を宣言しようとしている)上でこれを試してみてください:

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

しかし、コンラッドシュルツはコメントで指摘のように、あなたは必ずこれを行う必要はありません...シンプルurlencode() INGは問題ないはずあなたがクリーン探しのURLをしたい場合は...、URLが%20などを持っていないように、あなたはpreg_replaceを実行する必要があり、あなたがする必要があり、おそらくstrtolower()

0
function slug($string, $replacement = '-') { 
    $map = array(
     '/à|á|å|â/' => 'a', 
     '/è|é|ê|ẽ|ë/' => 'e', 
     '/ì|í|î/' => 'i', 
     '/ò|ó|ô|ø/' => 'o', 
     '/ù|ú|ů|û/' => 'u', 
     '/ç/' => 'c', 
     '/ñ/' => 'n', 
     '/ä|æ/' => 'ae', 
     '/ö/' => 'oe', 
     '/ü/' => 'ue', 
     '/Ä/' => 'Ae', 
     '/Ü/' => 'Ue', 
     '/Ö/' => 'Oe', 
     '/ß/' => 'ss', 
     '/[^\w\s]/' => '', 
     '/\\s+/' => $replacement, 
     "/$replacement+/" => $replacement 
    ); 
    return preg_replace(array_keys($map), array_values($map), $string); 
} 

Source

0

私はあなたが望むものは文字を翻字することだと思います。おそらく、このような何かを助けることができる:

/** 
* Strips non-url friendly characters from $string 
* 
* @param string $url string to be checked 
* @return string cleaned url 
*/ 
function generateSafeUrls($url) 
{ 
    $url = iconv('UTF-8', 'US-ASCII//TRANSLIT', $url); 

    return preg_replace('~[^a-z0-9_\.-]|\s+~i', '_', $url); 
} 
echo generateSafeUrls('reparações'); 
// reparacoes 
1
$GLOBALS['normalizeChars'] = array(
'Š'=>'S', 'š'=>'s', 'Ð'=>'Dj','Ž'=>'Z', 'ž'=>'z', 'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 
'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E', 'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 
'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O', 'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 
'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss','à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 
'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e', 'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 
'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o', 'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 
'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b', 'ÿ'=>'y', 'ƒ'=>'f' 
); 

function cleanForShortURL($toClean) { 
    $toClean  =  str_replace('&', '-and-', $toClean); 
    $toClean  = trim(preg_replace('/[^\w\d_ -]/si', '', $toClean));//remove all illegal chars 
    $toClean  =  str_replace(' ', '-', $toClean); 
    $toClean  =  str_replace('--', '-', $toClean); 

    return strtr($toClean, $GLOBALS['normalizeChars']); 
} 

Source