Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Не работает условие
Truthen  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 7
Пользователь №: 41393
На форуме: 1 год, 6 месяцев, 9 дней
Карма:




Писал функцию, которая для определенных целей пробегается по строке, проверяет каждый символ, и если это один из нужных, то копирует его в другую строку, либо вставляет в другую строку альтернативный символ.

$result_str = "";
$main_text_len = strlen($main_text);
for($i = 0; $i < $main_text_len; $i++)
{
$c = ord($main_text[$i]);

if($c == 32 || $c == ord('-') || $c == ord('_') || $c == ord('–') || $c == ord('—'))
{
continue;
}
//теперь нам нужно сделать так, что это если это кириллическая буква, которая может быть заменена латинской, то мы заменим ее сразу сами
else if(== ord('а') ||== ord('А') || $c == ord('М') || $c == ord('К') || $c == ord('о') || $c == ord('О'))
{
$result_str .= chr($c - 127);
}
else if(== ord('В'))
{
$result_str .= 'B';
}
else if($c == ord('е') || $c == ord('Е') || $c == ord('р') || $c == ord('Р'))
{
$result_str .= chr($c - 128);
}
else if(== ord('і'))
{
$result_str .= 'i';
}
else if(== ord('І'))
{
$result_str .= 'I';
}
else if(== ord('Н'))
{
$result_str .= 'H';
}
else if($c == ord('с') || $c == ord('С'))
{
$result_str .= chr($c - 142);
}
else if(== ord('Т'))
{
$result_str .= 'T';
}
else if(== ord('у'))
{
$result_str .= 'y';
}
else if($c == ord('х') || $c == ord('Х'))
{
$result_str .= chr($chr - 125);
}
else if($c == ord('г') || $c == ord('ґ'))
{
$result_str .= 'r';
}
else if(== ord('ё'))
{
$result_str .= 'e';
}
else if(== ord('Ё'))
{
$result_str .= 'E';
}
else if(== ord('З'))
{
$result_str .= '3';
}
else if(== ord('п'))
{
$result_str .= 'n';
}
else if(($c >= 33 && $c <= 44) || ($c >= 46 && $c <= 94) || ($c >= 97 && $c <= 122) || ($c >= 124 && $c <= 126) ||== 165 ||== 170 ||== 171 ||== 173 ||
== 175 ||== 185 ||== 186 ||== 187 ||== 191 ||== 193 ||== 195 ||== 196 ||== 198 ||== 200 ||== 201 ||== 203 ||== 207 ||
== 211 ||== 212 || ($c >= 214 && $c <= 223) ||== 225 ||== 226 ||== 228 || (>= 230 && $c <= 237) ||== 242 ||== 244 || ($c >= 246 && $c <= 255) || print($c . '<br>')) //принт здесь для условия не нужен, я просто хотел убедиться, что все условия выполняются
{
$result_str .= $main_text[$i];
}
else
{
echo $main_text[$i] . " — " . $c . "<br>";
$result_str .= '#';
}
}


И дело в том, что каким-то образом некоторые символы, например 'т' (242) или 'м' (236) не подходят под условие, хотя они явно там есть. При этом всем, принт в конце условия выводит именно эти номера (236, 242). Как так?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 6 дней
Карма: 299

Трезвый :
5 лет, 11 месяцев, 16 дней


print() возвращает единицу, что интерпретируется как true. Нафига он в условии то?
А вообще обрати внимание на подсветку переменной $c. Зачем нотисы загрубил?


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
DragonNoir  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 47
Пользователь №: 42691
На форуме: 8 месяцев, 24 дня
Карма: 2




А в какой кодировке у вас скрипт и строка $main_text? Функция ord() возвращает ASCII код символа, который не совпадает с тем же UTF-8


--------------------
- Сколько тебе надо времени на задачу?
- Месяц.
- А если дам тебе помощника?
- Тогда два месяца.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Truthen  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 7
Пользователь №: 41393
На форуме: 1 год, 6 месяцев, 9 дней
Карма:




Цитата
print() возвращает единицу, что интерпретируется как true. Нафига он в условии то?
А вообще обрати внимание на подсветку переменной $c. Зачем нотисы загрубил?

Ну я ж говорил в первом посте: это просто для дебага. Добавил его туда не для логики самого скрипта, а просто чтобы убедиться, что все условия проверяются (думал может где с операторами накосячил) и узнать значение, которое в $c.

Что означает "загрубил нотисы"?

Цитата
А в какой кодировке у вас скрипт и строка $main_text? Функция ord() возвращает ASCII код символа, который не совпадает с тем же UTF-8


Скрипт в Windows-1251, $main_text приходит из формы этой же страницы (кодировка та же) $main_text = (isset($_POST['main_text'])) ? (trim($_POST['main_text'])) : ("");

Это сообщение отредактировал Truthen - 24.03.2016 - 17:13
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 6 дней
Карма: 299

Трезвый :
5 лет, 11 месяцев, 16 дней


Цитата (Truthen @ 24.03.2016 - 13:08)
Что означает "загрубил нотисы"?

Выставил грубый уровень ошибок. Поставь первой строчкой скрипа это:
error_reporting(-1);
и увидишь много интересного.


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1357
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 10 дней
Карма: 77




if(
in_array($c, range(33, 44) ||
in_array($c, range(46, 94) ||
in_array($c, range(97, 122) ||
in_array($c, range(124, 126) ||
in_array($c, array(165, 170, 171, 173 ... 212) ||
in_array($c, range(230, 237) ||
in_array($c, array(242, 244) ||
in_array($c, range(246, 255)
)
даже лучше так.

Это сообщение отредактировал Kusss - 24.03.2016 - 17:45
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Truthen
Ты часом не транслит городишь? Если да – возьми готовое решение, из over 9000.
Для sluggable тоже over 9000.
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Truthen  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 7
Пользователь №: 41393
На форуме: 1 год, 6 месяцев, 9 дней
Карма:




Цитата (Guest @ 24.03.2016 - 17:49)
Ты часом не транслит городишь? Если да – возьми готовое решение, из over 9000.
Для sluggable тоже over 9000.

Нет, не транслит. Просто нужно ввести строку, произвести некоторые замены и получить хэш, чтобы сравнить с таким же, но полученным уже в другой среде (игре).


Цитата (twin @ 24.03.2016 - 17:32)
Выставил грубый уровень ошибок. Поставь первой строчкой скрипа это:
error_reporting(-1);
и увидишь много интересного.

Сделал так, выскакивает только Notice: Undefined variable: с in *путь_к_файлу* on line 32. На строку 32 приходится эта:

else if(== ord('а') ||== ord('А') || $c == ord('М') || $c == ord('К') || $c == ord('о') || $c == ord('О'))


Почему она не определена? Не понимаю.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Truthen  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 7
Пользователь №: 41393
На форуме: 1 год, 6 месяцев, 9 дней
Карма:




Мда, чорт бы побрал эту букву ЭС... Поставил на русском языке ЭС вместо СИ, кажется в этом причина, facepalm

Спасибо всем.

Это сообщение отредактировал Truthen - 24.03.2016 - 18:15
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса