Тема: String(6) != String(6) ?

Власне маю досить дивну ситуацію.
Отримую з одного сайту строку:

$string = 'Факультет: Факультет управління міським господарством';

витягую підстроку:

$result = substr($string, 0, 9);
echo $result; //Факультет

і тепер найцікавіше

if($result != 'Факультет')
echo 'Не співпадає';
else
echo 'Співпадає';

Як би це не було дивно, постійно виводить: Не співпадає.
Я ото ніяк зрозуміти чому в принципі два однакові рядки, не рівні між собою ?
Може це зв`язано якось із кодуванням чи якимись прихованими символами ?

2 Востаннє редагувалося Chemist-i (09.05.2014 15:32:04)

Re: String(6) != String(6) ?

if (strcasecmp( $result , 'Факультет') == 0)
...

strcasecmp
Ще є:
strcmp
До речі, там десь розказують про такє:

$pw1 = "yeah";
$pw2 = "yeah";
...
Where the use of the == operator would give us.:
if ($pw1==$pw2) {    // This returns true.
    // $pw1 and $pw2 are the same.
} else {
    // $pw1 and $pw2 are NOT the same.
}

Additionally, to check if $pw1 and $pw2 are of the same type you can use the === operator.

3

Re: String(6) != String(6) ?

vstup.info парсите? Я теж парсив, коли в комісії був :) Перше, що спадає на думку - кодування та латинські літери на місці кириличних, але саме тут їх немає. Прихованих символів там точно немає і не може бути.
Спробуйте результат strcmp (чи strcasecmp, як радить Chemist-i) вивести. І дуже добре було б викласти весь проблемний код (а ще краще - мінімальний шматок, який відтворює проблему), може, біда не в цих рядках?

Re: String(6) != String(6) ?

 var_dump(strcasecmp(substr($result, 0, 9),'Факультет'));

дає результат

int(4)

виходить, що проблема у кодуванні ?

5

Re: String(6) != String(6) ?

Не факт, але вже ближче. Взагалі strcmp колись повертав номер символа з помилкою, але в PHP це ніби не гарантовано. Спробуйте щось таке:

$my_faculty = 'Факультет';
$result = substr($string, 0, 9);
for( $i = 0; $i < 9; $i++ )
  if( $my_faculty[ $i ] != $result[ $i ] )
    echo "Symbol $i different : |".$my_faculty[ $i ]."| and |".$result[ $i ]."|<br />";

Re: String(6) != String(6) ?

Symbol 0 different : |Р| and |Ф|
Symbol 1 different : |¤| and |а|
Symbol 2 different : |Р| and |к|
Symbol 3 different : |°| and |у|
Symbol 4 different : |Р| and |л|
Symbol 5 different : |є| and |ь|
Symbol 6 different : |С| and |т|
Symbol 7 different : |ѓ| and |е|
Symbol 8 different : |Р| and |т|

Все ж таки кодування  *WALL*

7 Востаннє редагувалося koala (09.05.2014 16:21:51)

Re: String(6) != String(6) ?

Hanter написав:
echo $result; //Факультет
Hanter написав:
echo 'Не співпадає';

Ви хочете сказати, що обидва рядки виводилися нормально, а як по символу, то вже ні?

Re: String(6) != String(6) ?

koala написав:
Hanter написав:
echo $result; //Факультет
Hanter написав:
echo 'Не співпадає';

Ви хочете сказати, що обидва рядки виводилися нормально, а як по символу, то вже ні?

Так) Але я вже здається вирішив проблему. Я перекодував один із рядків, і ніби все ок.

9

Re: String(6) != String(6) ?

1. дивіться вихідний код сторінки тоді побачите символи які виводяться
2.  юзайте mb_substr
3/ коли парсите якісь сайти приводьте все до utf8 я робив бібліотеку якою видьоргуєш будь який сайт а тобі повертається результат у утф5 (визначається відносно кодування сторінки вказаного у мета тегах або кодування яке видає сервак)

;)