2010-12-15 1 views
0

У меня есть следующие 2 массива, которые я ищу для замены переменных. Однако моя проблема заключается в том, как сказать не заменять переменные, которые находятся в формате %XX. Прямо сейчас 0 будет заменен на %30, и это снова будет заменено на %%330 (заменено 3%33). Любая помощь очень ценится.php Str_replace Функция

$URL_Chars=array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','-','.','_','~',':','/','?','#','[',']','@','!','$','&','\'','(',')','*','+',',',';','=','%'); 

$URL_Encoded_Chars=array('%41','%42','%43','%44','%45','%46','%47','%48','%49','%4A','%4B','%4C','%4D','%4E','%4F','%50','%51','%52','%53','%54','%55','%56','%57','%58','%59','%5A','%61','%62','%63','%64','%65','%66','%67','%68','%69','%6A','%6B','%6C','%6D','%6E','%6F','%70','%71','%72','%73','%74','%75','%76','%77','%78','%79','%7A','%30','%31','%32','%33','%34','%35','%36','%37','%38','%39','%2D','%2E','%5F','%7E','%3A','%2F','%3F','%23','%5B','%5D','%40','%21','%24','%26','%27','%28','%29','%2A','%2B','%2C','%3B','%3D','%25'); 

$Hex_URL=str_replace($URL_Chars,$URL_Encoded_Chars,$Hex_URL); 
+12

Почему вы переопределяете `urlencode`? – 2010-12-15 13:55:05

+0

В этом смысле безумие. – 2010-12-15 13:57:03

+0

Единственная причина, по которой я могу думать, это то, что он хочет также кодировать все буквы/цифры как какое-то упражнение. `urlencode` не делает этого. – thirtydot 2010-12-15 14:00:56

ответ

0

Обработать строку: Выберите один чат в то время, и если он равен «%» И следующее символов являются цифры игнорирований rthose три, еще заменить текущий символ.

Вы можете установить правила replacemnt с 1 assoziative массива:

$replacements= array("A"=>"%41","B"=>"%42"....); 
0

Я хотел бы сделать это следующим образом:

function myUrlencode($url) { 
    $encodedUrl = ''; 

    foreach (str_split($url) as $char) { 
     $encodedUrl .= '%'.dechex(ord($char)); 
    } 

    return $encodedUrl; 
} 
1

Вы знаете, вы могли бы сделать это в более чистой манере, используя preg_replace с помощью e:

echo preg_replace('/([A-Za-z0-9])/e', '"%".dechex(ord("\\1"))', 'Abc'); 
// outputs %41%62%63 

Если вы хотите, другие символы тоже, просто добавьте их в скобки [], избегая при необходимости, конечно.

 Смежные вопросы

  • Нет связанных вопросов^_^