C言語なら俺に聞け 163 (987レス)
前次1-
抽出解除 レス栞

859
(2): デフォルトの名無しさん (オイコラミネオ MM6b-fGW2) [sage] 2025/07/01(火) 02:30:13.65 ID:LkiphQyhM(1) AAS
PHPの文字列は、1つの文字列の中でも、文字によってバイト数が異なるそうだ。
だから、$str[$k] の $k は、文字単位ではなくバイト単位。
文字単位で指定したい場合には、
mb_substr($str, $k, 1, "UTF-8")
とするとのこと。
文字列の終端には一応 0x00 が入っているが、文字の長さはバイト数で管理されており、0を
終端とはみなしていない。だから、文字コードが 0x00 の文字も文字列の中に含めることが可能。
$str = "こんにちは";
echo strlen($str); // バイト数(UTF-8なら15)
echo mb_strlen($str); // 文字数(5文字)

ところが、正規表現を扱う場合には、0x00 のバイトが含まれていると、文字列の終端と
みなされることがある。だから、ユーザーによって入力された文字列を正規表現で
安全チェックをしたつもりでも、文字列の途中に 0x00 のバイトが含まれていて、
それ以後に危険なコードをが含まれている倍がある。

C言語で作っていれば子の様な齟齬は起きない。
860
(1): デフォルトの名無しさん (ワッチョイ 5f98-4xcB) [sage] 2025/07/01(火) 05:48:42.66 ID:M5z4vIa80(1/10) AAS
>>859
× > PHPの文字列は
○ unicodeは

× > C言語で作っていれば
○ asciiに限定すれば

お前は基本的なところがまるで理解出来てない
そもそも文字コードの話なのだから、どの言語でも同じ
特定の言語を使用すると回避出来るとかいう話にはなり得ない
938: デフォルトの名無しさん (ワッチョイ 467f-OkwB) [] 2025/07/17(木) 08:01:19.44 ID:9jYPg0KZ0(1/3) AAS
>>859
PHPじゃなくてUTF-8やSJISを使っているならみんな同じだぞw
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.380s*