PHP 문자열(문자열)

伊谢尔伦
풀어 주다: 2016-11-24 14:03:10
원래의
2030명이 탐색했습니다.

一个字符串 string 就是由一系列的字符组成,其中每个字符等同于一个字节。这意味着 PHP 只能支持 256 的字符集,因此不支持 Unicode 。详见字符串类型详解。

Note: string 最大可以达到 2GB。

语法

一个字符串可以用 4 种方式表达:

单引号

双引号

heredoc 语法结构

nowdoc 语法结构(自 PHP 5.3.0 起)

单引号

定义一个字符串的最简单的方法是用单引号把它包围起来(字符 ')。

要表达一个单引号自身,需在它的前面加个反斜线(\)来转义。要表达一个反斜线自身,则用两个反斜线(\\)。其它任何方式的反斜线都会被当成反斜线本身:也就是说如果想使用其它转义序列例如 \r 或者 \n,并不代表任何特殊含义,就单纯是这两个字符本身。

Note: 不像双引号和 heredoc 语法结构,在单引号字符串中的变量和特殊字符的转义序列将不会被替换。

<?php
echo &#39;this is a simple string&#39;;
 
// 可以录入多行
echo &#39;You can also have embedded newlines in
strings this way as it is
okay to do&#39;;
 
// 输出: Arnold once said: "I&#39;ll be back"
echo &#39;Arnold once said: "I\&#39;ll be back"&#39;;
 
// 输出: You deleted C:\*.*?
echo &#39;You deleted C:\\*.*?&#39;;
 
// 输出: You deleted C:\*.*?
echo &#39;You deleted C:\*.*?&#39;;
 
// 输出: This will not expand: \n a newline
echo &#39;This will not expand: \n a newline&#39;;
 
// 输出: Variables do not $expand $either
echo &#39;Variables do not $expand $either&#39;;
?>
로그인 후 복사

双引号

如果字符串是包围在双引号(")中, PHP 将对一些特殊的字符进行解析:

序列

含义

\n

换行(ASCII 字符集中的 LF 或 0x0A (10))

\r

回车(ASCII 字符集中的 CR 或 0x0D (13))

\t

水平制表符(ASCII 字符集中的 HT 或 0x09 (9))

\v

垂直制表符(ASCII 字符集中的 VT 或 0x0B (11))(自 PHP 5.2.5 起)

\e

Escape(ASCII 字符集中的 ESC 或 0x1B (27))(自 PHP 5.4.0 起)

\f

换页(ASCII 字符集中的 FF 或 0x0C (12))(自 PHP 5.2.5 起)

\\

反斜线

\$

美元标记

\"

双引号

\[0-7]{1,3}

符合该正则表达式序列的是一个以八进制方式来表达的字符

\x[0-9A-Fa-f]{1,2}

符合该正则表达式序列的是一个以十六进制方式来表达的字符

和单引号字符串一样,转义任何其它字符都会导致反斜线被显示出来。PHP 5.1.1 以前,\{$var} 中的反斜线还不会被显示出来。

用双引号定义的字符串最重要的特征是变量会被解析,详见变量解析。

Heredoc 结构

第三种表达字符串的方法是用 heredoc 句法结构:<<<。在该运算符之后要提供一个标识符,然后换行。接下来是字符串 string 本身,最后要用前面定义的标识符作为结束标志。

结束时所引用的标识符必须在该行的第一列,而且,标识符的命名也要像其它标签一样遵守 PHP 的规则:只能包含字母、数字和下划线,并且必须以字母和下划线作为开头。

Warning

要注意的是结束标识符这行除了可能有一个分号(;)外,绝对不能包含其它字符。这意味着标识符不能缩进,分号的前后也不能有任何空白或制表符。更重要的是结束标识符的前面必须是个被本地操作系统认可的换行,比如在 UNIX 和 Mac OS X 系统中是 \n,而结束定界符(可能其后有个分号)之后也必须紧跟一个换行。

如果不遵守该规则导致结束标识不“干净”,PHP 将认为它不是结束标识符而继续寻找。如果在文件结束前也没有找到一个正确的结束标识符,PHP 将会在最后一行产生一个解析错误。

Heredocs 结构不能用来初始化类的属性。自 PHP 5.3 起,此限制仅对 heredoc 包含变量时有效。

Example #1 非法的示例

<?php
class foo {
   public $bar = <<<EOT
bar
   EOT;
}
?>
로그인 후 복사

Heredoc 结构就象是没有使用双引号的双引号字符串,这就是说在 heredoc 结构中单引号不用被转义,但是上文中列出的转义序列还可以使用。变量将被替换,但在 heredoc 结构中含有复杂的变量时要格外小心。

Example #2 Heredoc 结构的字符串示例

<?php
$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;
 
/* 含有变量的更复杂示例 */
class foo
{
   var $foo;
   var $bar;
 
   function foo()
   {
       $this->foo = &#39;Foo&#39;;
       $this->bar = array(&#39;Bar1&#39;, &#39;Bar2&#39;, &#39;Bar3&#39;);
   }
}
 
$foo = new foo();
$name = &#39;MyName&#39;;
 
echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital &#39;A&#39;: \x41
EOT;
?>
로그인 후 복사

以上例程会输出:

My name is "MyName". I am printing some Foo.
Now, I am printing some Bar2.
This should print a capital 'A': A

也可以把 Heredoc 结构用在函数参数中来传递数据:

Example #3 Heredoc 结构在参数中的示例

<?php
var_dump(array(<<<EOD
foobar!
EOD
));
?>
로그인 후 복사

在 PHP 5.3.0 以后,也可以用 Heredoc 结构来初始化静态变量和类的属性和常量:

Example #4 使用 Heredoc 结构来初始化静态值

<?php
// 静态变量
function foo()
{
   static $bar = <<<LABEL
Nothing in here...
LABEL;
}
 
// 类的常量、属性
class foo
{
   const BAR = <<<FOOBAR
Constant example
FOOBAR;
 
   public $baz = <<<FOOBAR
Property example
FOOBAR;
}
?>
로그인 후 복사

Nowdoc 结构

就象 heredoc 结构类似于双引号字符串,Nowdoc 结构是类似于单引号字符串的。Nowdoc 结构很象 heredoc 结构,但是 nowdoc 中不进行解析操作。这种结构很适合用于嵌入 PHP 代码或其它大段文本而无需对其中的特殊字符进行转义。与 SGML 的 结构是用来声明大段的不用解析的文本类似,nowdoc 结构也有相同的特征。

一个 nowdoc 结构也用和 heredocs 结构一样的标记 <<<, 但是跟在后面的标识符要用单引号括起来,即 <<<'EOT'。Heredoc 结构的所有规则也同样适用于 nowdoc 结构,尤其是结束标识符的规则。

Example #6 Nowdoc 结构字符串示例

<?php
$str = <<<&#39;EOD&#39;
Example of string
spanning multiple lines
using nowdoc syntax.
EOD;
 
/* 含有变量的更复杂的示例 */
class foo
{
   public $foo;
   public $bar;
 
   function foo()
   {
       $this->foo = &#39;Foo&#39;;
       $this->bar = array(&#39;Bar1&#39;, &#39;Bar2&#39;, &#39;Bar3&#39;);
   }
}
 
$foo = new foo();
$name = &#39;MyName&#39;;
 
echo <<<&#39;EOT&#39;
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should not print a capital &#39;A&#39;: \x41
EOT;
?>
로그인 후 복사

以上例程会输出:

My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should not print a capital 'A': \x41

Note:

不象 heredoc 结构,nowdoc 结构可以用在任意的静态数据环境中,最典型的示例是用来初始化类的属性或常量:

Example #7 静态数据的示例

<?php
class foo {
   public $bar = <<<&#39;EOT&#39;
bar
EOT;
}
?>
로그인 후 복사

Note:

Nowdoc 结构是在 PHP 5.3.0 中加入的。

变量解析

当字符串用双引号或 heredoc 结构定义时,其中的变量将会被解析。

这里共有两种语法规则:一种简单规则,一种复杂规则。简单的语法规则是最常用和最方便的,它可以用最少的代码在一个 string 中嵌入一个变量,一个 array 的值,或一个 object 的属性。

复杂规则语法的显著标记是用花括号包围的表达式。

简单语法

当 PHP 解析器遇到一个美元符号($)时,它会和其它很多解析器一样,去组合尽量多的标识以形成一个合法的变量名。可以用花括号来明确变量名的界线。

<?php
$juice = "apple";
 
echo "He drank some $juice juice.".PHP_EOL;
// Invalid. "s" is a valid character for a variable name, but the variable is $juice.
echo "He drank some juice made of $juices.";
?>
로그인 후 복사

以上例程会输出:

He drank some apple juice.
He drank some juice made of .

类似的,一个 array 索引或一个 object 属性也可被解析。数组索引要用方括号(])来表示索引结束的边际,对象属性则是和上述的变量规则相同。

Example #8 简单语法示例

<?php
$juices = array("apple", "orange", "koolaid1" => "purple");
 
echo "He drank some $juices[0] juice.".PHP_EOL;
echo "He drank some $juices[1] juice.".PHP_EOL;
echo "He drank some juice made of $juice[0]s.".PHP_EOL; // Won&#39;t work
echo "He drank some $juices[koolaid1] juice.".PHP_EOL;
 
class people {
   public $john = "John Smith";
   public $jane = "Jane Smith";
   public $robert = "Robert Paulsen";
   public $smith = "Smith";
}
 
$people = new people();
 
echo "$people->john drank some $juices[0] juice.".PHP_EOL;
echo "$people->john then said hello to $people->jane.".PHP_EOL;
echo "$people->john&#39;s wife greeted $people->robert.".PHP_EOL;
echo "$people->robert greeted the two $people->smiths."; // Won&#39;t work
?>
로그인 후 복사

以上例程会输出:

He drank some apple juice.
He drank some orange juice.
He drank some juice made of s.
He drank some purple juice.
John Smith drank some apple juice.
John Smith then said hello to Jane Smith.
John Smith's wife greeted Robert Paulsen.
Robert Paulsen greeted the two .

如果想要表达更复杂的结构,请用复杂语法。

复杂(花括号)语法

复杂语法不是因为其语法复杂而得名,而是因为它可以使用复杂的表达式。

任何具有 string 表达的标量变量,数组单元或对象属性都可使用此语法。只需简单地像在 string 以外的地方那样写出表达式,然后用花括号 { 和 } 把它括起来即可。由于 { 无法被转义,只有 $紧挨着 { 时才会被识别。可以用 {\$ 来表达 {$。下面的示例可以更好的解释:

<?php
// 显示所有错误
error_reporting(E_ALL);
 
$great = &#39;fantastic&#39;;
 
// 无效,输出: This is { fantastic}
echo "This is { $great}";
 
// 有效,输出: This is fantastic
echo "This is {$great}";
echo "This is ${great}";
 
// 有效
echo "This square is {$square->width}00 centimeters broad.";
 
// 有效,只有通过花括号语法才能正确解析带引号的键名
echo "This works: {$arr[&#39;key&#39;]}";
 
// 有效
echo "This works: {$arr[4][3]}";
 
// 这是错误的表达式,因为就象 $foo[bar] 的格式在字符串以外也是错的一样。
// 换句话说,只有在 PHP 能找到常量 foo 的前提下才会正常工作;这里会产生一个
// E_NOTICE (undefined constant) 级别的错误。
echo "This is wrong: {$arr[foo][3]}";
 
// 有效,当在字符串中使用多重数组时,一定要用括号将它括起来
echo "This works: {$arr[&#39;foo&#39;][3]}";
 
// 有效
echo "This works: " . $arr[&#39;foo&#39;][3];
 
echo "This works too: {$obj->values[3]->name}";
 
echo "This is the value of the var named $name: {${$name}}";
 
echo "This is the value of the var named by the return value of getName(): {${getName()}}";
 
echo "This is the value of the var named by the return value of \$object->getName(): {${$object->getName()}}";
 
// 无效,输出: This is the return value of getName(): {getName()}
echo "This is the return value of getName(): {getName()}";
?>
로그인 후 복사

也可以在字符串中用此语法通过变量来调用类的属性。

<?php
class foo {
   var $bar = &#39;I am bar.&#39;;
}
 
$foo = new foo();
$bar = &#39;bar&#39;;
$baz = array(&#39;foo&#39;, &#39;bar&#39;, &#39;baz&#39;, &#39;quux&#39;);
echo "{$foo->$bar}\n";
echo "{$foo->$baz[1]}\n";
?>
로그인 후 복사

以上例程会输出:

I am bar.

I am bar.

Note:

函数、方法、静态类变量和类常量只有在 PHP 5 以后才可在 {$} 中使用。然而,只有在该字符串被定义的命名空间中才可以将其值作为变量名来访问。只单一使用花括号 ({}) 无法处理从函数或方法的返回值或者类常量以及类静态变量的值。

<?php
// 显示所有错误
error_reporting(E_ALL);
 
class beers {
   const softdrink = &#39;rootbeer&#39;;
   public static $ale = &#39;ipa&#39;;
}
 
$rootbeer = &#39;A & W&#39;;
$ipa = &#39;Alexander Keith\&#39;s&#39;;
 
// 有效,输出: I&#39;d like an A & W
echo "I&#39;d like an {${beers::softdrink}}\n";
 
// 也有效,输出: I&#39;d like an Alexander Keith&#39;s
echo "I&#39;d like an {${beers::$ale}}\n";
?>
로그인 후 복사

存取和修改字符串中的字符

string 中的字符可以通过一个从 0 开始的下标,用类似 array 结构中的方括号包含对应的数字来访问和修改,比如 $str[42]。可以把 string 当成字符组成的 array。函数 substr() 和substr_replace() 可用于操作多于一个字符的情况。

Note: string 也可用花括号访问,比如 $str{42}。

Warning

用超出字符串长度的下标写入将会拉长该字符串并以空格填充。非整数类型下标会被转换成整数。非法下标类型会产生一个 E_NOTICE 级别错误。用负数下标写入字符串时会产生一个 E_NOTICE 级别错误,用负数下标读取字符串时返回空字符串。写入时只用到了赋值字符串的第一个字符。用空字符串赋值则赋给的值是 NULL 字符。

Warning

PHP 的字符串在内部是字节组成的数组。因此用花括号访问或修改字符串对多字节字符集很不安全。仅应对单字节编码例如 ISO-8859-1 的字符串进行此类操作。

Example #9 一些字符串示例

<?php
// 取得字符串的第一个字符
$str = &#39;This is a test.&#39;;
$first = $str[0];
 
// 取得字符串的第三个字符
$third = $str[2];
 
// 取得字符串的最后一个字符
$str = &#39;This is still a test.&#39;;
$last = $str[strlen($str)-1];
 
// 修改字符串的最后一个字符
$str = &#39;Look at the sea&#39;;
$str[strlen($str)-1] = &#39;e&#39;;
?>
自 PHP 5.4 起字符串下标必须为整数或可转换为整数的字符串,否则会发出警告。之前例如 "foo" 的下标会无声地转换成 0。
Example #10 PHP 5.3 和 PHP 5.4 的区别
<?php
$str = &#39;abc&#39;;
 
var_dump($str[&#39;1&#39;]);
var_dump(isset($str[&#39;1&#39;]));
 
var_dump($str[&#39;1.0&#39;]);
var_dump(isset($str[&#39;1.0&#39;]));
 
var_dump($str[&#39;x&#39;]);
var_dump(isset($str[&#39;x&#39;]));
 
var_dump($str[&#39;1x&#39;]);
var_dump(isset($str[&#39;1x&#39;]));
?>
로그인 후 복사

以上例程在PHP 5.3中的输出:

string(1) "b"
bool(true)
string(1) "b"
bool(true)
string(1) "a"
bool(true)
string(1) "b"
bool(true)

以上例程在PHP 5.4中的输出:

string(1) "b"
bool(true)

Warning: Illegal string offset '1.0' in /tmp/t.php on line 7
string(1) "b"
bool(false)

Warning: Illegal string offset 'x' in /tmp/t.php on line 9
string(1) "a"
bool(false)
string(1) "b"
bool(false)

Note:

用 [] 或 {} 访问任何其它类型(不包括数组或具有相应接口的对象实现)的变量只会无声地返回 NULL。

Note:

PHP 5.5 增加了直接在字符串原型中用 [] 或 {} 访问字符的支持。

有用的函数和运算符

字符串可以用 '.'(点)运算符连接起来,注意 '+'(加号)运算符没有这个功能。更多信息参考字符串运算符。

对于 string 的操作有很多有用的函数。

可以参考字符串函数了解大部分函数,高级的查找与替换功能可以参考正则表达式函数或 Perl 兼容正则表达式函数。

另外还有 URL 字符串函数,也有加密/解密字符串的函数(mcrypt 和 mhash)。

最后,可以参考字符类型函数。

转换成字符串

一个值可以通过在其前面加上 (string) 或用 strval() 函数来转变成字符串。在一个需要字符串的表达式中,会自动转换为 string。比如在使用函数 echo 或 print 时,或在一个变量和一个 string进行比较时,就会发生这种转换。类型和类型转换可以更好的解释下面的事情,也可参考函数 settype()。

一个布尔值 boolean 的 TRUE 被转换成 string 的 "1"。Boolean 的 FALSE 被转换成 ""(空字符串)。这种转换可以在 boolean 和 string 之间相互进行。

一个整数 integer 或浮点数 float 被转换为数字的字面样式的 string(包括 float 中的指数部分)。使用指数计数法的浮点数(4.1E+6)也可转换。

Note:

在脚本的区域(category LC_NUMERIC)中定义了十进制小数点字符。参见 setlocale()。

数组 array 总是转换成字符串 "Array",因此, echo 和 print 无法显示出该数组的内容。要显示某个单元,可以用 echo $arr['foo'] 这种结构。要显示整个数组内容见下文。

在 PHP 4 中对象 object 总是被转换成字符串 "Object",如果为了调试原因需要打印出对象的值,请继续阅读下文。为了得到对象的类的名称,可以用 get_class() 函数。自 PHP 5 起,适当时可以用 __toString 方法。

资源 resource 总会被转变成 "Resource id #1" 这种结构的字符串,其中的 1 是 PHP 在运行时分配给该 resource 的唯一值。不要依赖此结构,可能会有变更。要得到一个 resource 的类型,可以用函数 get_resource_type()。

NULL 总是被转变成空字符串。

如上面所说的,直接把 array,object 或 resource 转换成 string 不会得到除了其类型之外的任何有用信息。可以使用函数 print_r() 和 var_dump() 列出这些类型的内容。

大部分的 PHP 值可以转变成 string 来永久保存,这被称作串行化,可以用函数 serialize() 来实现。如果 PHP 引擎设定支持 WDDX,PHP 值也可被串行化为格式良好的 XML 文本。

字符串转换为数值

当一个字符串被当作一个数值来取值,其结果和类型如下:

如果该字符串没有包含 '.','e' 或 'E' 并且其数字值在整型的范围之内(由 PHP_INT_MAX 所定义),该字符串将被当成 integer 来取值。其它所有情况下都被作为 float 来取值。

该字符串的开始部分决定了它的值。如果该字符串以合法的数值开始,则使用该数值。否则其值为 0(零)。合法数值由可选的正负号,后面跟着一个或多个数字(可能有小数点),再跟着可选的指数部分。指数部分由 'e' 或 'E' 后面跟着一个或多个数字构成。

<?php
$foo = 1 + "10.5";                // $foo is float (11.5)
$foo = 1 + "-1.3e3";              // $foo is float (-1299)
$foo = 1 + "bob-1.3e3";           // $foo is integer (1)
$foo = 1 + "bob3";                // $foo is integer (1)
$foo = 1 + "10 Small Pigs";       // $foo is integer (11)
$foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2)
$foo = "10.0 pigs " + 1;          // $foo is float (11)
$foo = "10.0 pigs " + 1.0;        // $foo is float (11)
?>
로그인 후 복사

更多信息可以参考 Unix 手册中的 strtod(3)。

本节中的示例可以通过复制/粘贴到下面的代码中来显示:

echo "\$foo==$foo; type is " . gettype ($foo) . "
\n";

?>

C에서처럼 문자를 정수로 변환하여 코드를 얻는다고 생각하지 마세요. ASCII 코드와 문자 사이를 변환하려면 ord() 및 chr() 함수를 사용하십시오.

문자열 유형에 대한 자세한 설명

PHP에서 문자열의 구현은 바이트 배열과 버퍼 길이를 나타내는 정수로 구성됩니다. 바이트를 문자로 변환하는 방법에 대한 정보는 없으며 결정하는 것은 프로그래머의 몫입니다. 특히 문자열이 어떤 값으로 구성되는지에 대한 제한은 없습니다. 값이 0인 바이트("NUL 바이트")는 문자열의 어느 곳에나 있을 수 있습니다(이 매뉴얼에서는 이진이 아닌 것으로 언급되는 여러 함수가 있지만). "안전", NUL 바이트 이후의 모든 데이터를 무시할 수 있음).

문자열 유형의 이 기능은 PHP에 별도의 "바이트" 유형이 없는 이유를 설명합니다. 대신 문자열이 사용되었습니다. 네트워크 소켓에서 읽은 임의의 데이터와 같이 텍스트가 아닌 값을 반환하는 함수는 여전히 문자열을 반환합니다.

PHP는 문자열 인코딩을 지정하지 않으므로 문자열은 어떻게 인코딩되나요? 예를 들어 문자열 "á"는 "xE1"(ISO-8859-1), "xC3xA1"(UTF-8, C 형식), "x61xCCx81"(UTF-8, D 형식) 또는 기타 가능한 표현식과 동일합니까? ? 대답은 문자열이 스크립트 파일과 동일한 인코딩으로 인코딩된다는 것입니다. 따라서 스크립트가 ISO-8859-1로 인코딩되면 그 안의 문자열도 ISO-8859-1로 인코딩됩니다. 그러나 Zend Multibyte가 활성화된 경우에는 적용되지 않습니다. 이 경우 스크립트는 어떤 방식으로든(명시적으로 지정되거나 자동으로 감지됨) 인코딩된 다음 일부 내부 인코딩으로 변환될 수 있으며 문자열은 이러한 방식으로 인코딩됩니다. 스크립트 인코딩(또는 Zend Multibyte가 활성화된 경우 내부 인코딩)에는 몇 가지 제약이 있습니다. 이는 이 인코딩이 UTF-8 또는 ISO-8859-1과 같은 호환 가능한 ASCII 상위 집합이어야 함을 의미합니다. 그러나 초기 문자와 초기 문자가 아닌 문자 모두에 동일한 바이트 값을 사용할 수 있는 상태 종속 인코딩은 상태를 전환할 때 문제를 일으킬 수 있다는 점에 유의하세요.

물론 텍스트에 대해 작동하는 함수가 유용하려면 문자열이 인코딩되는 방식에 대해 가정해야 합니다. 안타깝게도 이에 대한 PHP 함수에는 다양한 변형이 있습니다.

일부 함수에서는 문자열이 단일 바이트로 인코딩된다고 가정하지만 바이트를 특정 문자로 해석할 필요는 없습니다. 예를 들어 substr(), strpos(), strlen() 및 strcmp()입니다. 이러한 함수에 대해 생각하는 또 다른 방법은 메모리 버퍼, 즉 바이트 및 바이트 첨자 측면에서 작동한다는 것입니다.

일부 함수에는 문자열 인코딩이 전달되며 기본적으로 이 정보를 사용할 수 없다고 가정할 수 있습니다. 예에는 htmlentities() 및 mbstring 확장의 대부분의 함수가 포함됩니다.

다른 함수는 현재 로케일(setlocale() 참조)을 사용하지만 바이트 단위로 작동합니다. 예를 들어 strcasecmp(), strtoupper() 및 ucfirst()입니다. 즉, 이러한 함수는 단일 바이트 인코딩에만 사용할 수 있으며 인코딩은 로케일과 일치해야 합니다. 예를 들어, strtoupper("á")는 로캘이 정확하고 á가 단일 바이트 인코딩인 경우 "Á"를 반환합니다. UTF-8로 인코딩된 경우 올바른 결과를 반환하지 않으며 결과는 현재 로케일에 따라 손상된 값을 반환할 수 있습니다.

마지막으로 일부 함수는 문자열이 특정 인코딩, 일반적으로 UTF-8이라고 가정합니다. 이는 intl 확장 및 PCRE(위 예에서는 u 수정자가 사용되는 경우에만) 확장의 대부분의 함수에 해당됩니다. 이는 특정 목적 때문이지만 utf8_decode()는 UTF-8 인코딩을 가정하고 utf8_encode()는 ISO-8859-1 인코딩을 가정합니다.

마지막으로 유니코드를 올바르게 사용하는 프로그램을 작성하려면 데이터를 손상시킬 수 있는 기능을 피하도록 주의해야 합니다. intl 및 mbstring 확장의 기능을 사용합니다. 그러나 유니코드 인코딩을 처리할 수 있는 함수를 사용하는 것은 시작에 불과합니다. 어떤 언어에서 제공하는 기능이 무엇이든 가장 기본적인 것은 유니코드 명세를 이해하는 것입니다. 예를 들어, 대문자와 소문자만 가정하는 프로그램은 완전히 잘못된 것입니다.


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿