Ответ 1
Как закодирован ваш файл? У PHP возникают проблемы, когда дело доходит до unicode. В вашем случае попробуйте использовать escape-последовательность \x99
вместо прямого встраивания символа TM.
Мне нужно сопоставить (нечувствительный к регистру) "abcd" и необязательный символ товарного знака
Regex: /abcd(™)?/gi
См. пример:
preg_match("/abcd(™)?/gi","AbCd™ U9+",$matches);
print_r($matches);
Когда я запускаю это, $matches
не заполняется ничем... Даже не создается как пустой массив. Любые идеи?
Как закодирован ваш файл? У PHP возникают проблемы, когда дело доходит до unicode. В вашем случае попробуйте использовать escape-последовательность \x99
вместо прямого встраивания символа TM.
Примечание: Я не являюсь гуру PHP. Однако это, похоже, проблема кодировок символов. Например, ваш файл PHP может быть закодирован как win-1252 (где ™ закодирован как \x99
), а данные, которые вы пытаетесь сопоставить, могут быть закодированы как UTF-8 (где ™ кодируется как \xe2\x84\xa2
), или наоборот (т.е. ваш файл UTF-8, а ваши данные - win-1252). Попробуйте искать в этом направлении и дайте нам больше информации о том, что вы делаете.
Я подозреваю, что это имеет какое-то отношение к буквальному символу торговой марки.
Вы, вероятно, захотите узнать, как использовать Unicode с вашими регулярными выражениями, а затем вставить escape-последовательность для символ товарного знака.
Это была комбинация вещей... это было регулярное выражение, которое наконец-то сработало:
/abcd(\xe2\x84\xa2)?/i
Мне пришлось удалить модификатор /g
и изменить символ tm на \xe2\x84\xa2
.