[PHP-doc 609] Re: mb_strpos

Takeharu Haraikawa harai @ netcompass.co.jp
2006年 2月 25日 (土) 16:08:59 JST


はらいです。

堀田さんのほとんどそのままでよいかと思うのですが、1点気がついたところ
がありました。

> mb_strpos() performs multi-byte safe strpos() operation based on 
> number of characters. needle position is counted from the 
> beginning of the haystack. First character's position is 0. 
> Second character position is 1, and so on.

> mb_strpos() は、単純な文字数(通常はバイト数と等しい)に基づいて動
> 作する strpos() を、マルチバイト文字列に対しても正しく動作するよ
> うに拡張したものです。needle の位置を haystack の頭から順に数え
> ていきます。先頭文字の位置は 0 、2 番目の文字は 1 という具合です。

ここでの character を「文字」と訳してしまうと、マルチバイト文字に
対応した関数、ということもあいまって、

<?php print mb_strpos("あいうえお", "い", "SJIS"); ?>

が 2 番目の文字、ということで 1 を返しそうな関数に見えますが、
こちらの PHP 4.4.0 では 2 を返しています。

原文でも、「strpos() のキャラクタの数え方に基づきながらも、マルチ
バイトセーフに振舞う」と読めます。

堀田さんも翻訳にあたっては同じ解釈をしている(ニュアンスは同じ)と
思いますが、特に前半部分はバイト単位であることを強調して
---
 mb_strpos() は、strpos() をマルチバイト文字列に正しくマッチする
 ように拡張したものですが、文字数は strpos() と同じく1バイト単位で
 数えます。
---
くらいでも良いかも知れません。
後半は、
---
 needle の位置を haystack の先頭から順に数えていきます。
 最初の1バイト目の位置は 0、2バイト目の位置は 1 という具合です。
---
ですかね。

マルチバイト関数に関しては、個々の関数について訳を考えていくよりも、
もう少し概念的なところから用語集を作っていったほうが良さそうですね。

character が明らかに1バイトを表している場合は、「文字」ではなくて、
「1バイト」または「1バイトのキャラクタ」と訳していくとか…。

ただ、原文でも、character の使い方は一貫していなくて、

http://www.php.net/manual/en/ref.mbstring.php
two or more consecutive bytes may represent a single character

では、character は、自然言語としての「文字」ですね。
このあたり、よく読まないと難しいですね。

-- 
Takeharu Haraikawa <harai @ netcompass.co.jp>




PHP-doc メーリングリストの案内