UTF-8 字符在 <td> 元素中显示不佳
UTF-8 char is not showing well in <td> elements
我有一个奇怪的问题...
我有以下字符串:
$sString = "This is my encoded string é à";
首先,我删除 html 个实体:
$sString = html_entity_decode($sString, ENT_COMPAT, 'UTF-8');
我想要的是正确拆分此字符串,以在同一 table 行的不同列中显示每个字符。
嗯,从逻辑上讲,我用过:
$aString = str_split($sString) // Fill an array with each char
没用。它在框中显示字符,因为我没有使用 html_entity_decode...
所以,我决定尝试以下方法:
for($i = 0; $i < 16; $i++) {
echo "<td>";
echo $sLine1[$i];
echo "</td>";
}
有效 但是 特殊字符显示为 ?在黑盒子里(编码问题)。
很奇怪的地方,就是我不放在<td>
个元素里,显示的很好,还有没有 编码问题 !
我的 HTML 页面包含 UTF-8 字符集并且格式正确(使用 doctype、html、正文等...)
我不得不承认,在这一点上,我不知道这个问题是从哪里来的...
更新
我刚刚意识到,当我在 <td>
之外按字符显示时,它也不起作用。编码的字符需要成对才能工作!
这对我来说是个问题,因为字符串来自数据库,特殊字符不会总是在同一个地方!
示例:
这将显示编码问题字符:
$sString = "Paëlla";
echo $sString[3];
但是这样的话,它会显示 ë:
$sString = "Paëlla";
echo $sString[3];
echo $sString[4];
一些添加到 dinesh123 答案:
- 尝试 trim html strip_tags 在你得到一个字符串 ($sString)
- 检查文件编码
- 尝试在文件开头设置 header("Content-Type:text/html; charset=UTF-8")
str_split
按字节拆分字符串。但在 UTF-8 中,像 é 和 à 这样的字符是在 2 个字节的序列上编码的。您需要使用 mbstring 才能识别 UTF-8。
mb_internal_encoding('UTF-8');
function mb_str_split($string, $length = 1) {
$ret = array();
$l = mb_strlen($string);
for ($i = 0; $i < $l; $i += $length) {
$ret[] = mb_substr($string, $i, $length);
}
return $ret;
}
如果将 [offset]
应用于字符串,则相同:如果字符串的字符集可以对一个以上的字节进行字符编码,那么您得到的是一个字节,而不是一个字符。在这种情况下,使用 mb_substr
.
mb_internal_encoding('UTF-8');
echo mb_substr("Paëlla", 2, 1);
我有一个奇怪的问题...
我有以下字符串:
$sString = "This is my encoded string é à";
首先,我删除 html 个实体:
$sString = html_entity_decode($sString, ENT_COMPAT, 'UTF-8');
我想要的是正确拆分此字符串,以在同一 table 行的不同列中显示每个字符。
嗯,从逻辑上讲,我用过:
$aString = str_split($sString) // Fill an array with each char
没用。它在框中显示字符,因为我没有使用 html_entity_decode...
所以,我决定尝试以下方法:
for($i = 0; $i < 16; $i++) {
echo "<td>";
echo $sLine1[$i];
echo "</td>";
}
有效 但是 特殊字符显示为 ?在黑盒子里(编码问题)。
很奇怪的地方,就是我不放在<td>
个元素里,显示的很好,还有没有 编码问题 !
我的 HTML 页面包含 UTF-8 字符集并且格式正确(使用 doctype、html、正文等...)
我不得不承认,在这一点上,我不知道这个问题是从哪里来的...
更新
我刚刚意识到,当我在 <td>
之外按字符显示时,它也不起作用。编码的字符需要成对才能工作!
这对我来说是个问题,因为字符串来自数据库,特殊字符不会总是在同一个地方!
示例:
这将显示编码问题字符:
$sString = "Paëlla";
echo $sString[3];
但是这样的话,它会显示 ë:
$sString = "Paëlla";
echo $sString[3];
echo $sString[4];
一些添加到 dinesh123 答案:
- 尝试 trim html strip_tags 在你得到一个字符串 ($sString)
- 检查文件编码
- 尝试在文件开头设置 header("Content-Type:text/html; charset=UTF-8")
str_split
按字节拆分字符串。但在 UTF-8 中,像 é 和 à 这样的字符是在 2 个字节的序列上编码的。您需要使用 mbstring 才能识别 UTF-8。
mb_internal_encoding('UTF-8');
function mb_str_split($string, $length = 1) {
$ret = array();
$l = mb_strlen($string);
for ($i = 0; $i < $l; $i += $length) {
$ret[] = mb_substr($string, $i, $length);
}
return $ret;
}
如果将 [offset]
应用于字符串,则相同:如果字符串的字符集可以对一个以上的字节进行字符编码,那么您得到的是一个字节,而不是一个字符。在这种情况下,使用 mb_substr
.
mb_internal_encoding('UTF-8');
echo mb_substr("Paëlla", 2, 1);