xref: /PHP-8.4/ext/standard/php_string.h (revision 3f1a4441)
1 /*
2    +----------------------------------------------------------------------+
3    | Copyright (c) The PHP Group                                          |
4    +----------------------------------------------------------------------+
5    | This source file is subject to version 3.01 of the PHP license,      |
6    | that is bundled with this package in the file LICENSE, and is        |
7    | available through the world-wide-web at the following url:           |
8    | https://www.php.net/license/3_01.txt                                 |
9    | If you did not receive a copy of the PHP license and are unable to   |
10    | obtain it through the world-wide-web, please send a note to          |
11    | license@php.net so we can mail you a copy immediately.               |
12    +----------------------------------------------------------------------+
13    | Authors: Rasmus Lerdorf <rasmus@php.net>                             |
14    |          Stig Sæther Bakken <ssb@php.net>                            |
15    +----------------------------------------------------------------------+
16 */
17 
18 #ifndef PHP_STRING_H
19 #define PHP_STRING_H
20 
21 # include "ext/random/php_random.h"
22 
23 #ifdef ZTS
24 PHP_MINIT_FUNCTION(localeconv);
25 PHP_MSHUTDOWN_FUNCTION(localeconv);
26 #endif
27 #ifdef ZEND_INTRIN_SSE4_2_FUNC_PTR
28 PHP_MINIT_FUNCTION(string_intrin);
29 #endif
30 
31 #define strnatcmp(a, b) \
32 	strnatcmp_ex(a, strlen(a), b, strlen(b), 0)
33 #define strnatcasecmp(a, b) \
34 	strnatcmp_ex(a, strlen(a), b, strlen(b), 1)
35 PHPAPI int strnatcmp_ex(char const *a, size_t a_len, char const *b, size_t b_len, bool is_case_insensitive);
36 PHPAPI struct lconv *localeconv_r(struct lconv *out);
37 PHPAPI char *php_strtr(char *str, size_t len, const char *str_from, const char *str_to, size_t trlen);
38 PHPAPI zend_string *php_addslashes(zend_string *str);
39 PHPAPI void php_stripslashes(zend_string *str);
40 PHPAPI zend_string *php_addcslashes_str(const char *str, size_t len, const char *what, size_t what_len);
41 PHPAPI zend_string *php_addcslashes(zend_string *str, const char *what, size_t what_len);
42 PHPAPI void php_stripcslashes(zend_string *str);
43 PHPAPI zend_string *php_basename(const char *s, size_t len, const char *suffix, size_t sufflen);
44 PHPAPI size_t php_dirname(char *str, size_t len);
45 PHPAPI char *php_stristr(const char *s, const char *t, size_t s_len, size_t t_len);
46 PHPAPI zend_string *php_str_to_str(const char *haystack, size_t length, const char *needle,
47 		size_t needle_len, const char *str, size_t str_len);
48 PHPAPI zend_string *php_trim(zend_string *str, const char *what, size_t what_len, int mode);
49 PHPAPI size_t php_strip_tags(char *rbuf, size_t len, const char *allow, size_t allow_len);
50 PHPAPI size_t php_strip_tags_ex(char *rbuf, size_t len, const char *allow, size_t allow_len, bool allow_tag_spaces);
51 PHPAPI void php_implode(const zend_string *delim, HashTable *arr, zval *return_value);
52 PHPAPI void php_explode(const zend_string *delim, zend_string *str, zval *return_value, zend_long limit);
53 
54 PHPAPI size_t php_strspn(const char *s1, const char *s2, const char *s1_end, const char *s2_end);
55 PHPAPI size_t php_strcspn(const char *s1, const char *s2, const char *s1_end, const char *s2_end);
56 
57 PHPAPI bool php_binary_string_shuffle(php_random_algo_with_state engine, char *str, zend_long len);
58 
59 #ifdef _REENTRANT
60 # ifdef PHP_WIN32
61 #  include <wchar.h>
62 # endif
63 # define php_mblen(ptr, len) ((int) mbrlen(ptr, len, &BG(mblen_state)))
64 # define php_mb_reset() memset(&BG(mblen_state), 0, sizeof(BG(mblen_state)))
65 #else
66 # define php_mblen(ptr, len) mblen(ptr, len)
67 # define php_mb_reset() php_ignore_value(mblen(NULL, 0))
68 #endif
69 
70 #define PHP_STR_PAD_LEFT		0
71 #define PHP_STR_PAD_RIGHT		1
72 #define PHP_STR_PAD_BOTH		2
73 #define PHP_PATHINFO_DIRNAME 	1
74 #define PHP_PATHINFO_BASENAME 	2
75 #define PHP_PATHINFO_EXTENSION 	4
76 #define PHP_PATHINFO_FILENAME 	8
77 #define PHP_PATHINFO_ALL	(PHP_PATHINFO_DIRNAME | PHP_PATHINFO_BASENAME | PHP_PATHINFO_EXTENSION | PHP_PATHINFO_FILENAME)
78 
79 #endif /* PHP_STRING_H */
80