2015-05-10 2 views
1

Я сделал функцию раньше, чтобы пройти через заданную строку и заменить несколько символов, таких как é, ó и т. Д. С помощью e, o, чтобы избавиться от иностранных символов.

Функция отлично работает, когда я устанавливаю строку и использовать его так:

$string = "Héllo"; 
echo replace_fc($string); 

Возвращает: Привет

Однако, когда я беру пост данные из поля ввода, где я типизированных здравствуй, как это:

$string = $_POST['words']; 
echo replace_fc($string); 

возвращается HA llo

Не работает.

Кто-нибудь знает, почему это может быть? Если я повторяю данные POST, это точно так же, как я ввел его (Héllo), и он показывает на странице просто отлично. Функция не должна выводить никаких специальных символов, просто «Привет», поэтому я не понимаю, почему это испортится. Функция ниже. (PS Игнорировать мою систему строки/массив, я делал это, зная, что он не является оптимальным, я просто сделал это для странностей.)

function replace_fc($chars){ 
    //Hexadecimal characters separated by commas 
    $hexes_str = " 
     C0-A,C1-A,C2-A,C3-A,C4-A,C5-A,C6-A,        "/* Capital A  */." 
     E0-a,E1-a,E2-a,E3-a,E4-a,E5-a,E6-a,        "/* Lowercase A  */." 
     C8-E,C9-E,CA-E,CB-E,           "/* Capital E  */." 
     E8-e,E9-e,EA-e,EB-e,           "/* Lowercase E  */." 
     CC-I,CD-I,CE-I,CF-I,           "/* Capital I  */." 
     EC-i,ED-i,EE-i,EF-i,           "/* Lowercase I  */." 
     D2-O,D3-O,D4-O,D5-O,D6-O,D8-O,         "/* Capital O  */." 
     F2-o,F3-o,F4-o,F5-o,F6-o,F8-o,         "/* Lowercase O  */." 
     D9-U,DA-U,DB-U,DC-U,           "/* Capital U  */." 
     F9-u,FA-u,FB-u,FC-u,           "/* Lowercase U  */." 
     C7-C,D0-D,D1-N,D7-X,DD-Y,DF-B,DF-S,        "/* Capital Misc */." 
     E7-c,F0-d,F1-n,D7-x,FD-y,FE-b,FF-y 
    "; 

    //Set them in to an array 
    $hexes = explode(",", $hexes_str); 
    //Remove spaces 
    $hexes = array_map("trim", $hexes); 

    //Empty array for all of my characters 
    $numhtml = array(); 

    //For each of the numbers 
    foreach($hexes as $x){ 
     //If $x is set to something (might be empty because of above explode, best to be safe) 
     if($x){ 
      //Split them up 
      $temp = explode("-",$x); 
      //Stick them in the array 
      $numhtml[$temp[1]][] = $temp[0]; 
     } 
    } 

    //Split the chars 
    $chars_split = str_split($chars); 

    //Set up empty vars to use 
    $chars_enc = array(); $chars_result = null; 

    //Get the urlencode versions 
    foreach($chars_split as $x){ 
     $chars_enc[] = urlencode($x); 
    } 

    //For each of those 
    foreach($chars_enc as $x){ 
     //If it has a % in it 
     if(strpos($x, "%") !== false){ 
      //Get a version without the % 
      $char = str_replace("%", "", $x); 
      $replaced = false; 

      //Go through the numhtml array 
      foreach($numhtml as $key => $y){ 
       //If it has this char in it 
       if(in_array($char, $y)){ 
        //Add the key to the result 
        $chars_result .= $key; 

        //Set replaced to true 
        $replaced = true; 
       } 
      } 

      //If replaced is still false 
      if(!$replaced){ 
       //Add the original char 
       $chars_result .= urldecode($x); 
      } 
     //If it is a space 
     }elseif($x == "+"){ 
      $chars_result .= " "; 
     //If there is no %, and it's not a space 
     }else{ 
      //Then add it normally 
      $chars_result .= $x; 
     } 
    } 

    //Return the result 
    return $chars_result; 
} 
+0

Это проблема с кодировкой. Ваше поле ввода декодируется другим способом, чем файл, в который вы записываете свой код. – Krycke

+0

Я был близок к +1 ответу, поскольку он помог мне решить его, но спасибо, мне удалось это исправить. Я отправлю ответ на него, чтобы показать, что это сделано. –

ответ

0

Кто-то отправило ответ здесь, который помог мне решить эту проблему, но это были удалены, поэтому я объясню, что было сказано и что я сделал.

Ответ сообщил мне, что $ _POST автоматически кодирует данные, и я никогда не видел этого в действии раньше, так как я никогда не имел дело с UTF-8 и иностранными персонажами, пока не решил осмелиться сегодня.

Как я удосужился это сделать следующее:

$string = utf8_decode($_POST['words']); 
$string = replace_fc($string); 
echo "$string<br />"; 

utf8_decode() функция, которая корректировала данные POST, так что я мог бы использовать его.

Решено сейчас, спасибо всем, кто разместил ответ.

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