Задать вопрос

Как заставить PHP обрабатывать строку, игнорируя управляющие последовательности?

Понимаю, вопрос тупой, но не могу понять, как это работает.
Есть строка '\xbc'. Если она в коде записана в одинарных кавычках, то PHP считает, что в ней 4 символа, а если в двойных - то один. Соответственно и обрабатываются эти строки по-разному.
Если я не создаю строковую переменную как литерал в коде, а беру из файла или GET-запроса и т. д., то функциями в PHP она обрабатывается как строка в двойных кавычках. А как сделать так, чтобы обрабатывалась как строка в одинарных кавычках?

Пример:
$str = $_GET['text'];  //text == "\xbc"
echo strlen($str);  //вернёт 1, а я хочу 4


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

Update
Пример с '\x0a' был слишком сложным и оторванным от реальности, поэтому заменил на '\xbc'.
На python проблему можно решить так:
>>> s1 = '\xbc\xbd'
>>> s1
'¼½'
>>> len(s1)
2
>>> s2 = ascii(s1)[1:-1]
>>> s2
'\\xbc\\xbd'
>>>print(s2)
\xbc\xbd
>>> len(s2)
8

Как сделать подобное в PHP?
  • Вопрос задан
  • 395 просмотров
Подписаться 4 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
PHP не нужно заставлять игнорировать управляющие последовательности в переменных. Потому что он их и так игнорирует.

Вопрос действительно "тупой". И причём путаница тут уже в самом начале.
Утверждение
Если я не создаю строковую переменную как литерал в коде, а беру из файла или GET-запроса и т. д., то функциями в PHP она обрабатывается как строка в двойных кавычках.

является неверным.

Надо всегда проверять свои предположения на практике.
То есть на самом деле вся проблема сводится к тому, что ещё до попадания в переменную $_GET['text'], текст был сконвертирован. В случае же, если в адресной строке будет передано значение \xbc, то оно и будет в переменной и прекрасно запишется в базу

Есть вероятность, что в переменную приезжает один символ, но в кодировке utf-8. И strlen честно показывает длину в несколько байт, что добавляет путаницы ещё больше.
Ответ написан
Комментировать
bin2hex

Там в комментарях есть разные примеры использования

А для чего вообще это нужно?
Ответ написан
@Zerg89
Представить строку как Char set массив и вычитать длинну массива
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы