我正在尝试将我的数组中的特殊字符转换为html实体代码:
这是我的帮手数组:
'specialChars' => [
'!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+',
',', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\',
']', '^', '_', '`', '{', '|', '}', '§', '©', '¶'
]
这就是功能:
public static function convert($specialChars = [])
{
$htmlEntityArray = [];
if(count($specialChars) == 0)
{
$specialChars = Config::get('constants.specialChars'); // gets the special char from the helper array
}
foreach ($specialChars as $key => $value)
{
$htmlEntityArray = array_map("htmlentities", $specialChars);
}
return $htmlEntityArray;
}
但是这只会让我返回这个数组,它会成功地转换一些而不是一些:
array:32 [▼
0 => "!"
1 => """
2 => "#"
3 => "$"
4 => "%"
5 => "&"
6 => "'"
7 => "("
8 => ")"
9 => "*"
10 => "+"
11 => ","
12 => "/"
13 => ":"
14 => ";"
15 => "<"
16 => "="
17 => ">"
18 => "?"
19 => "@"
20 => "["
21 => "\"
22 => "]"
23 => "^"
24 => "_"
25 => "`"
26 => "{"
27 => "|"
28 => "}"
29 => "§"
30 => "©"
31 => "¶"
]
答案 0 :(得分:3)
您必须使用ENT_QUOTES
和ENT_HTML5
flags。
$specialChars = [
'!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+',
',', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\',
']', '^', '_', '`', '{', '|', '}', '§', '©', '¶'
];
var_export(array_map(function ($str) { return htmlentities($str, ENT_QUOTES | ENT_HTML5); }, $specialChars));
返回:
array (
0 => '!',
1 => '"',
2 => '#',
3 => '$',
4 => '%',
5 => '&',
6 => ''',
7 => '(',
8 => ')',
9 => '*',
10 => '+',
11 => ',',
12 => '/',
13 => ':',
14 => ';',
15 => '<',
16 => '=',
17 => '>',
18 => '?',
19 => '@',
20 => '[',
21 => '\',
22 => ']',
23 => '^',
24 => '_',
25 => '`',
26 => '{',
27 => '|',
28 => '}',
29 => '§',
30 => '©',
31 => '¶',
)
答案 1 :(得分:2)
你必须使用像这样的htmlentities的第二个参数“flag”
$htmlEntityArray = array_map(function($char) {
return htmlentities($char, ENT_QUOTES | ENT_HTML5);
}, $specialChars);
答案 2 :(得分:0)
注意:我没有检查实体列表,因此没有注意到所有字符都有可用的翻译。我将离开答案,以防它可以帮助其他人使用不同的字符列表。
来自docs(强调我的):
将具有HTML字符实体等效项的所有字符转换为这些实体。
另见
- get_html_translation_table() - 返回htmlspecialchars和htmlentities使用的转换表
在其他情况下,mb_convert_encoding()使用@foreach($products as $product)
{{ $product->name }}
@endforach
{{ $products->links() }}
作为目标编码可以获得更好的结果。问题是你的实体中没有一个明显的模式(大多数是基本的US-ASCII字符,在HTML中没有任何特殊含义,因此不需要为任何通常的任何转换为HTML实体原因)。所以你有两个选择: