strpos криво ищет вхождение кавычек (")

DyaDya
На сайте с 11.04.2007
Offline
147
3233

Есть код, например, который в поле $row['name'] удаляет вхождение кавычек.


if (strpos($row['name'], '"')!==false || strpos($row['name'], '"')!==false){
#в названии есть кавычка, удаляем её
$name_new=str_replace('"', '', $row['name']);
$name_new=str_replace('"', '', $name_new);
}

До недавнего времени проблем не было. Чистил от кавычек ВСЕ названия. Но на днях заметил, что как-то выборочно начала срабатывать функция strpos(). В большинстве фраз перестались кавычки находиться, но они точно есть! Причём эта проблема судя по всему на хостинге, ибо на локальном компе проверяю, всё как и раньше отлично находит. Не могу понять, какие настройки хостинга могли так повлиять.

Пробовал локаль задавать setlocale(LC_ALL, 'ru_RU.CP1251', 'ru_RU', 'rus'); не помогло.

Кто знает, в чём может быть проблема?

p.s. preg_match("/\"/", $row['name']) тоже пробовал, не ищет (.

Выбирайте качественный хостинг (http://vashmaster.ru/informaciya/o_poleznyh_programmah/news83.php) и продвигайте сайты в СЕОПУЛЬТ (http://seopult.ru/ref.php?ref=72b5ed9561fe66a1). А на «SAPE» я в обиде :) Не упрекайте за очепятки, пишу вслепую (http://ergosolo.ru/) и также делаю сайты (http://www.vashmaster.ru/) ;)
S
На сайте с 28.10.2005
Offline
319
#1

А зачем условие нужно?

semenov добавил 04.03.2009 в 22:41

А если так будет: " ? ))

semenov добавил 04.03.2009 в 22:43

Или так: & #34; ? ))) (без пробела)

DyaDya
На сайте с 11.04.2007
Offline
147
#2

Условие нужно, чтобы поменьше мучить базу. Так как обновление записи идёт, только тогда, когда изменились данные. А не у всех записей.

Не находит кавычку именно в этом виде ". И похоже только тогда, когда кавычка два раза в строке встречается. Когда только один раз - strpos($row['name'], '"') срабатывает нормально.

--

Хотя есть выход - проверку сделать после

$name_new=str_replace('"', '', $row['name']);

$name_new=str_replace('"', '', $name_new);

if ($name_new!= $row['name']), то делаем апдейт записи в базе (хорошо хоть str_replace не перестала работать)...

--

Но всё равно, почему strpos($row['name'], '"')!==false не всегда находит кавычку (")?

S
На сайте с 28.10.2005
Offline
319
#3

Там точно " или спецсимвол?

попробуйте так:


if (stristr($row['name'], '"') || stristr($row['name'], '& #34;') || stristr($row['name'], '"')){
#в названии есть кавычка, удаляем её
$name_new=str_replace('& #34;', '', $row['name']);
$name_new=str_replace('"', '', $name_new);
$name_new=str_replace('"', '', $name_new);
}

& #34; - без пробела

DyaDya
На сайте с 11.04.2007
Offline
147
#4

Мля, всё-таки был спецсимвол! Файрфокс при просмотре выделенного фрагмента мне упорно показывал просто " ! Не верь глазам своим).

semenov, спасибо за поддержку). Всё заработало.

FeoOne
На сайте с 27.12.2008
Offline
32
#5

зачем такой сложный код? Не проще ли так:

$rep = array('& #34;', '"', '"');
$name_new=str_replace($rep, '', $row['name']);

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий