3v4l.org

run code in 300+ PHP versions simultaneously
<?php $string = "To be escaped: + - = && || > < ! ( ) { } [ ] ^ \" ~ * ? : \ / triple ||| and split '&<&'"; print_r( [ $string, LouisBarranqueiro($string), MikkoRantalainen($string), mickmackusa($string) ] ); function LouisBarranqueiro($string) { $regex = "/[\\+\\-\\=\\&\\|\\!\\(\\)\\{\\}\\[\\]\\^\\\"\\~\\*\\<\\>\\?\\:\\\\\\/]/"; $string = preg_replace_callback ($regex, function ($matches) { return "\\" . $matches[0]; }, $string); return $string; } function MikkoRantalainen($s) { static $replacements = array(); if (!$replacements) { # https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#_reserved_characters $replacements = array( "\\" => "\\\\", # must be done first to not double encode later backslashes! "+" => "\\+", "-" => "\\-", "=" => "\\=", "&" => "\\&", "|" => "\\|", ">" => "", # cannot be safely encoded "<" => "", # cannot be safely encoded "!" => "\\!", "(" => "\\(", ")" => "\\)", "{" => "\\{", "}" => "\\}", "[" => "\\[", "]" => "\\]", "^" => "\\^", "\"" => "\\\"", "~" => "\\~", "*" => "\\*", "?" => "\\?", ":" => "\\:", "/" => "\\/", ); } return str_replace(array_keys($replacements), array_values($replacements), $s); } function mickmackusa($string) { return preg_replace( [ '_[<>]+_', // prevent hack where double-symbol is split by gt/lt symbol '_[-+=!(){}[\]^"~*?:\\/\\\\]|&(?=&)|\|(?=\|)_', ], [ '', '\\\\$0', ], $string ); }
Output for 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.4, 8.3.6 - 8.3.27, 8.4.1 - 8.4.14, 8.5.0
Array ( [0] => To be escaped: + - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ / triple ||| and split '&<&' [1] => To be escaped\: \+ \- \= \&\& \|\| \> \< \! \( \) \{ \} \[ \] \^ \" \~ \* \? \: \\ \/ triple \|\|\| and split '\&\<\&' [2] => To be escaped\: \+ \- \= \&\& \|\| \! \( \) \{ \} \[ \] \^ \" \~ \* \? \: \\ \/ triple \|\|\| and split '\&\&' [3] => To be escaped\: \+ \- \= \&& \|| \! \( \) \{ \} \[ \] \^ \" \~ \* \? \: \\ \/ triple \|\|| and split '\&&' )
Output for 8.4.15
/bin/php-8.4.15: /usr/lib/libm.so.6: version `GLIBC_2.38' not found (required by /bin/php-8.4.15) /bin/php-8.4.15: /usr/lib/libm.so.6: version `GLIBC_2.35' not found (required by /bin/php-8.4.15) /bin/php-8.4.15: /usr/lib/libc.so.6: version `GLIBC_2.34' not found (required by /bin/php-8.4.15) /bin/php-8.4.15: /usr/lib/libc.so.6: version `GLIBC_2.38' not found (required by /bin/php-8.4.15)
Process exited with code 1.
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 Array ( [0] => To be escaped: + - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ / triple ||| and split '&<&' [1] => To be escaped\: \+ \- \= \&\& \|\| \> \< \! \( \) \{ \} \[ \] \^ \" \~ \* \? \: \\ \/ triple \|\|\| and split '\&\<\&' [2] => To be escaped\: \+ \- \= \&\& \|\| \! \( \) \{ \} \[ \] \^ \" \~ \* \? \: \\ \/ triple \|\|\| and split '\&\&' [3] => To be escaped\: \+ \- \= \&& \|| \! \( \) \{ \} \[ \] \^ \" \~ \* \? \: \\ \/ triple \|\|| and split '\&&' )

preferences:
216.14 ms | 411 KiB | 5 Q