Некоторые из моих кодов иногда выдают ошибку, и я не могу понять, почему.
Ошибка strpos(): Offset not contained in string в операторе while.
Я знаю, что означает эта ошибка, но я не знаю, почему иногда у меня возникает эта ошибка...
Вот часть кода:
if (!empty($args['name'])){
$p = 0;
while(($p = strpos($args['name'],'&',$p)) !== false){
if (substr($args['name'],$p,5) == '&'){
$p += 5;
}else{
++$p;
$args['name'] = substr($args['name'],0,$p).'amp;'.substr($args['name'],$p);
$p += 4;
}
}
}
Я попытался изменить оператор While следующим образом:
while(strlen($args['name']) >= $p && ($p = strpos($args['name'],'&',$p)) !== false){
Но это не решает проблему.
Кстати, этот код взят из плагина wordpress, вот документ:
/** A workaround for seems to be an overlook in WordPress core.
* Dealing with '&' in term name.
* A term name containing '&' is stored in database with '&' instead of '&',
* but search in get_terms is done on raw '&' coming from $_POST variable.
*/
У тебя есть идеи? Почему этот код иногда неверен?
Спасибо
ФИКСИРОВАННЫЙ
Моя переменная была Array ...






Пожалуйста, проверьте $args['name'] перед циклом while
Добавьте if (isset($args['name'])) или более точно с if (!empty($args['name']))
@user3013440, попробуйте заменить stripos на strpos
Этот код должен работать нормально. в порядке.
В вашем случае $p не может быть больше вашего параметра.
Пожалуйста, убедитесь, что ваш параметр $args['name'] является string. Я почти уверен, что это не так.
Могу поспорить, что это массив (is_array())
Боже мой! Мне так жаль всех! Это был массив! Спасибо
Плохо, я забыл, но у меня уже есть
if (!empty($args['name'])){