PHP str_getcsv игнорирует кавычки ⇐ Php
-
Anonymous
PHP str_getcsv игнорирует кавычки
Мне нужно проанализировать такие строки, как k1=v1, k2=v2, ... kn=vn с основным разделителем (,) и разделителем-ключом-значением (=) могут различаться. Значения могут быть заключены в кавычки ("или ') и могут содержать основной разделитель в кавычках.
Поскольку в документации PHP я не увидел ограничений для такого рода использования, я нашел str_getcsv подходящим.
Но при первом тесте я обнаружил, что символ вложения был проигнорирован:
$ php -v PHP 8.1.2-1ubuntu2.14 (cli) (собран: 18 августа 2023 г., 11:41:11) (НТС) Авторские права (c) Группа PHP Zend Engine v4.1.2, авторские права (c) Zend Technologies с Zend OPcache v8.1.2-1ubuntu2.14, авторские права (c), Zend Technologies $ php -а Интерактивная оболочка php > $S2 = 'name=ABCD, value=17.3, autoID, onclick="getinfo($this, 99);"'; php > var_dump($S2); string(60) "name=ABCD, value=17.3, autoID, onclick="getinfo($this, 99);"" php > var_dump(str_getcsv($S2)); массив (5) { [0]=> строка (9) «имя = ABCD» [1]=> строка(11) "значение=17,3" [2]=> строка (7) «автоID» [3]=> string(23) " onclick="getinfo($this" [4]=> строка(6) " 99);"" } php > $S3 = 'name=ABCD, value=17.3, autoID, onclick=|getinfo($this, 99);|'; php > var_dump($S3); string(60) "name=ABCD, value=17.3, autoID, onclick=|getinfo($this, 99);|" php > var_dump(str_getcsv($S3, ',', '|')); массив (5) { [0]=> строка (9) «имя = ABCD» [1]=> строка(11) "значение=17,3" [2]=> строка (7) «автоID» [3]=> string(23) " onclick=|getinfo($this" [4]=> строка(6) " 99);|" } Строка в кавычках "getinfo($this, 99);" включает основной разделитель (,) и поэтому разделяется на два элемента без учета кавычек. Использование другого символа вложения ничего не меняет.
Поэтому мне интересно, является ли это ошибкой, неправильным использованием или мое предположение о том, что str_getcsv подходит для этой операции, неверно. Любая помощь и комментарии приветствуются.
Проверено в разных средах PHP, результат один и тот же
Мне нужно проанализировать такие строки, как k1=v1, k2=v2, ... kn=vn с основным разделителем (,) и разделителем-ключом-значением (=) могут различаться. Значения могут быть заключены в кавычки ("или ') и могут содержать основной разделитель в кавычках.
Поскольку в документации PHP я не увидел ограничений для такого рода использования, я нашел str_getcsv подходящим.
Но при первом тесте я обнаружил, что символ вложения был проигнорирован:
$ php -v PHP 8.1.2-1ubuntu2.14 (cli) (собран: 18 августа 2023 г., 11:41:11) (НТС) Авторские права (c) Группа PHP Zend Engine v4.1.2, авторские права (c) Zend Technologies с Zend OPcache v8.1.2-1ubuntu2.14, авторские права (c), Zend Technologies $ php -а Интерактивная оболочка php > $S2 = 'name=ABCD, value=17.3, autoID, onclick="getinfo($this, 99);"'; php > var_dump($S2); string(60) "name=ABCD, value=17.3, autoID, onclick="getinfo($this, 99);"" php > var_dump(str_getcsv($S2)); массив (5) { [0]=> строка (9) «имя = ABCD» [1]=> строка(11) "значение=17,3" [2]=> строка (7) «автоID» [3]=> string(23) " onclick="getinfo($this" [4]=> строка(6) " 99);"" } php > $S3 = 'name=ABCD, value=17.3, autoID, onclick=|getinfo($this, 99);|'; php > var_dump($S3); string(60) "name=ABCD, value=17.3, autoID, onclick=|getinfo($this, 99);|" php > var_dump(str_getcsv($S3, ',', '|')); массив (5) { [0]=> строка (9) «имя = ABCD» [1]=> строка(11) "значение=17,3" [2]=> строка (7) «автоID» [3]=> string(23) " onclick=|getinfo($this" [4]=> строка(6) " 99);|" } Строка в кавычках "getinfo($this, 99);" включает основной разделитель (,) и поэтому разделяется на два элемента без учета кавычек. Использование другого символа вложения ничего не меняет.
Поэтому мне интересно, является ли это ошибкой, неправильным использованием или мое предположение о том, что str_getcsv подходит для этой операции, неверно. Любая помощь и комментарии приветствуются.
Проверено в разных средах PHP, результат один и тот же
Мобильная версия