Есть ли в PHP эквивалент для побитового оператора ИЛИ (символ канала |)? Я использую плагин WordPress для вставки php, чтобы разрешить php-код в моих записях контента на постах и страницах, и плагин работает так, чтобы взять код и выполнить оператор eval для него, но функция eval работает с определенными символами, такими как побитовое ИЛИ или двойной трубы ИЛИ или знак доллара $. Я столкнулся с проблемой, пытаясь вызвать json_encode с некоторыми флагами, соединенными побитовым ИЛИ, и, конечно, проверенный код сработал при запуске. Мое решение состоит в том, чтобы поместить код в функцию (например, json_encode_eval ()) и определить функцию в functions.php с помощью вызова json_encode, то есть return json_encode ($ str, FLAG | ANOTHER_FLAG); , но есть ли лучшее решение? Заранее спасибо.
Проверьте, кодирует ли WordPress код | в html экранированный код. (Ищите любой из
| | | | |
)
Если это так, вам придется убежать от него перед тем, как вызвать его.
[Я почти уверен, что всегда есть лучший способ, чем высмеивать отправленный пользователем текст — там может быть огромная дыра в безопасности.]Я попробовал это, и это дает ожидаемый ответ:
<?php
eval("\$a = 2|1;");
$b = 2|1;
var_dump($a);
var_dump($b);
Выходы:
int(3)
int(3)
Других решений пока нет …