Я сделал функцию раньше, чтобы пройти через заданную строку и заменить несколько символов, таких как é, ó и т. Д. С помощью 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;
}
Это проблема с кодировкой. Ваше поле ввода декодируется другим способом, чем файл, в который вы записываете свой код. – Krycke
Я был близок к +1 ответу, поскольку он помог мне решить его, но спасибо, мне удалось это исправить. Я отправлю ответ на него, чтобы показать, что это сделано. –