Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:108822 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 71591 invoked from network); 3 Mar 2020 15:34:02 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 3 Mar 2020 15:34:02 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id DFFC81804F3 for ; Tue, 3 Mar 2020 05:53:12 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on php-smtp4.php.net X-Spam-Level: * X-Spam-Status: No, score=1.2 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_SBL_CSS,SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.2 X-Spam-ASN: AS39142 195.191.240.0/23 X-Spam-Virus: No X-Envelope-From: Received: from hos109.unaxus.net (hos109.unaxus.net [195.191.240.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Tue, 3 Mar 2020 05:53:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=heigl.org; s=default; h=Content-Type:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Sender:Reply-To:Cc:Content-Transfer-Encoding:Content-ID :Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To: Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe :List-Post:List-Owner:List-Archive; bh=EXPoGdeQ4AB/Pi+oxdwJdu39exURL4zol0Jf+b/3q1U=; b=lKVujZwWKw+bOPfVkO3oWuBsSU EhEAWlBH+Hn8I02WqL+BfxVHHbqChbEuSShP13fbK8auIWJArDkhe4DIV+3A6DVEldMKedXiH8S7w Bk0BSG89y4lVT3yPo+URl0NskW3uL2eKjhFONpSIuLB1LFJqutprN6jwkJrHdQ6Z72g6jpmoRR3j6 QxwFEf1jafoXXbsc0SeWNyo1hfsDNrtJMaM15QC0iskv51t54+c+bupenVQ7IZoJY/PB43/DuvEYL AadKgivSPIx8v/erbph0O/69A+6J8YInqGjbqqlFY8irQgnqNhpjWeo9W3gZL+AldRZND2EoSnPkB ZaqWPWMA==; Received: from ma.bitexpert.net ([82.119.168.218]:40156 helo=[192.168.13.2]) by hos109.unaxus.net with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.93) (envelope-from ) id 1j97yw-00BdKu-7U for internals@lists.php.net; Tue, 03 Mar 2020 14:53:10 +0100 To: internals@lists.php.net References: <704fa268-6194-0ec2-d6b0-8f5efdf1009f@heigl.org> Autocrypt: addr=andreas@heigl.org; keydata= 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 RLiMJj+x8jGy2xtu Message-ID: <38c8ccc6-160b-cd92-d330-8e6163751710@heigl.org> Date: Tue, 3 Mar 2020 14:53:00 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="Xp4uOf88FJxcKRvnMkpGcbNTwBIRztU07" X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - hos109.unaxus.net X-AntiAbuse: Original Domain - lists.php.net X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - heigl.org X-Get-Message-Sender-Via: hos109.unaxus.net: authenticated_id: a.heigl@heigl.org X-Authenticated-Sender: hos109.unaxus.net: a.heigl@heigl.org Subject: Re: [PHP-DEV] Proposal for a new basic function: str_contains From: andreas@heigl.org (Andreas Heigl) --Xp4uOf88FJxcKRvnMkpGcbNTwBIRztU07 Content-Type: multipart/mixed; boundary="X3DZcFQg0hKFkAZpXpbjfOujTUoMEt66M" --X3DZcFQg0hKFkAZpXpbjfOujTUoMEt66M Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: quoted-printable Am 03.03.20 um 14:29 schrieb Nicolas Grekas: > Le mar. 3 mars 2020 =C3=A0 11:04, Rowan Tommins a > =C3=A9crit : >=20 >> On Tue, 3 Mar 2020 at 08:46, Andreas Heigl wrote: >> >>> >>> While it is mainly aimed at being a mere convenience-function that co= uld >>> also be easily implemented in userland it misses one main thing IMO w= hen >>> handling unicode-strings: Normalization. >>> >>> >> >> While I would love to see more functionality for handling Unicode whic= h >> didn't treat it as just another character set, I don't think sprinklin= g it >> into the main string functions of the language would be the right appr= oach. >> Even if we changed all the existing functions to be "Unicode-aware", a= s was >> planned for PHP 6, the resulting API would not handle all cases correc= tly. >> >> In this case, a Unicode-based string API ought to provide at least two= >> variants of "contains", as options or separate functions: >> >> - a version which matches on code point, for answering queries like "d= oes >> this string contain right-to-left override characters?" >> - at least one form of normalization, but probably several >> >> If there was serious work on a new string API in progress, a freeze on= >> additions to the current API would make sense; but right now, the >> byte-based string API is what we have, and I think this function is a >> sensible addition to it. >> >=20 >=20 > FYI, I wrote a String handling lib, shipped as Symfony String: > - doc: https://symfony.com/doc/current/components/string.html > - src: https://github.com/symfony/string >=20 > TL;DR, it provides 3 classes of value objects, dealing with bytes, code= > points and grapheme cluster (~=3D normalized unicode) >=20 > It makes no sense to have `str_contains()` or any global function able = to > deal with Unicode normalization *unless* the PHP string values embed th= eir > unit system (one of: bytes, codepoints or graphemes). >=20 > With this rationale, I agree with Rowan: PHP's native string functions = deal > with bytes. So should str_contains(). Other unit systems can be impleme= nted > in userland (until PHP implements something similar to Symfony String i= n > core - but that's another topic.) str_contains as it currently is implemented can also easily be implemented in userland. That was my reasoning. I would think otherwise would it take unicode into account as that's much harder to implement in userland. And I didn'T want to start a new discussion, I merely wanted to explain the reasoning behind my decission. Cheers Andreas --=20 ,,, (o o) +---------------------------------------------------------ooO-(_)-Ooo-+ | Andreas Heigl | | mailto:andreas@heigl.org N 50=C2=B022'59.5" E 08=C2=B0= 23'58" | | http://andreas.heigl.org http://hei.gl/wiFKy7 | +---------------------------------------------------------------------+ | http://hei.gl/root-ca | +---------------------------------------------------------------------+ --X3DZcFQg0hKFkAZpXpbjfOujTUoMEt66M-- --Xp4uOf88FJxcKRvnMkpGcbNTwBIRztU07 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEOHo7et0VdZk8RJK34Ff+SCK3tkUFAl5eYTwACgkQ4Ff+SCK3 tkVoPQ//Sre1vGhPMI6h0LIZ7g+q5bRF7Rr+K3LrwajbVnHKhtJQO0hyiXHr3f1H 5uTF/ms2ARxe3nVExihG1MAvD+8iRtS30BaIZj8rE7ny2BoGPNKuKybi/jvfLFVj 0VPq+Bm9grBvpzmQ7ct0pz95ULBQZ3MkkG9O7Qep5+OlZ7kOVsdasWpTcD3hw2e+ lvNuKDZsvcfrUZzfNFGaTbLWLWuc/4E4Wd0DUgRoVBlIlZJitcK+tJdpmwcJcFpx RQznrN7bq1jEUMWzTPEeA8Cls40lBdHTpGXD2k9ZXxzzBVqfIV500qzm4hj9vEqM nHYOdgKP6Y9aL2Br3dx6Bf2IJHCW78K+jHSBwtFdhYE91Zqf83yvb8W7QsN6qjCd kAN+8x/ATIf6IsUA8LEl+v7q/Q8FLaTYWDmE6uSZSbZJ+mpzAzFJ2c/519c18Ldn LQqde+TIZxJgzQK2PVk23r7sWJqrbJht5B4QGWokOqlXyl8CiBx7TEhivhZNjY7m pdpFd3eH8eWUsBZiBUdxsXJPIvhOJyDZlZW6Jhg4F2jtjTcDwoOu4CuV1cnNSonD HZK7z9mjTpR7oW8vLIFSno7NB+9WwrFZeu+G4I8tKkIB/sddKTWAeXTqWsJ54P2V BrM0P592dej3gR1jI60LHAj+wVqR3Ir1px5QyHQ4Jj4nud8n0aU= =BAWQ -----END PGP SIGNATURE----- --Xp4uOf88FJxcKRvnMkpGcbNTwBIRztU07--