PHP-函数突然出现特殊字符错误
PHP-Function suddently has errors with special characters
背景
我目前正在测试开发一个小网站。
我创建的一个一直运行良好的小函数突然造成了一些麻烦。
我已经发现它与特殊字符有关。
系统
- 自制软件
- MacOS --> 上周我对 macOS 进行了一次小更新。
- 本地主机
- Symfony5
问题
public function slugify(string $value) : string {
// for testing:
$value = "<TEST1/>"; // <-- no error
$value = "<TEST1/ß>"; // <-- ERROR
$value = "<TEST1/ä>"; // <-- ERROR
$value = "<TEST1/ö>"; // <-- ERROR
dump($value);
$value = strtolower($value); // small letters
$replaceArray = [
">" => "",
"<" => "",
" " => "-",
"/" => "-",
"ß" => "ss",
"ä" => "ae",
"ö" => "oe",
"ü" => "ue",
];
foreach ($replaceArray as $from => $to) {
$value = str_replace($from, $to, $value);
}
dump($value);
return $value;
}
错误消息
An exception has been thrown during the rendering of a template ("Parameter "name"
for route "app_welcome_index" must match "[^/]++" ("test1-�" given) to generate a
corresponding URL.").
问题
也许我的 Homebrew-Webserver (apache/httpd) 已经被 apple 的标准版本取代了?!?!但我不知道如何验证这一点。
或者任何其他想法可能发生了什么?
干杯
蒂姆
正如我在上面的评论中提到的,在处理多字节字符时,您应该使用 PHP 中存在的 mb_*
前缀函数。我们还可以稍微清理和简化代码,通过在一行中一次性完成所有工作 - 无需迭代替换数组,因为 str_replace()
可以处理替换 key/value 的数组对。
public function slugify(string $value) : string
{
$replaceArray = [
">" => "",
"<" => "",
" " => "-",
"/" => "-",
"ß" => "ss",
"ä" => "ae",
"ö" => "oe",
"ü" => "ue",
];
$value = str_replace(array_keys($replaceArray), $replaceArray, mb_strtolower($value));
return $value;
}
背景
我目前正在测试开发一个小网站。 我创建的一个一直运行良好的小函数突然造成了一些麻烦。 我已经发现它与特殊字符有关。
系统
- 自制软件
- MacOS --> 上周我对 macOS 进行了一次小更新。
- 本地主机
- Symfony5
问题
public function slugify(string $value) : string {
// for testing:
$value = "<TEST1/>"; // <-- no error
$value = "<TEST1/ß>"; // <-- ERROR
$value = "<TEST1/ä>"; // <-- ERROR
$value = "<TEST1/ö>"; // <-- ERROR
dump($value);
$value = strtolower($value); // small letters
$replaceArray = [
">" => "",
"<" => "",
" " => "-",
"/" => "-",
"ß" => "ss",
"ä" => "ae",
"ö" => "oe",
"ü" => "ue",
];
foreach ($replaceArray as $from => $to) {
$value = str_replace($from, $to, $value);
}
dump($value);
return $value;
}
错误消息
An exception has been thrown during the rendering of a template ("Parameter "name"
for route "app_welcome_index" must match "[^/]++" ("test1-�" given) to generate a
corresponding URL.").
问题
也许我的 Homebrew-Webserver (apache/httpd) 已经被 apple 的标准版本取代了?!?!但我不知道如何验证这一点。 或者任何其他想法可能发生了什么?
干杯 蒂姆
正如我在上面的评论中提到的,在处理多字节字符时,您应该使用 PHP 中存在的 mb_*
前缀函数。我们还可以稍微清理和简化代码,通过在一行中一次性完成所有工作 - 无需迭代替换数组,因为 str_replace()
可以处理替换 key/value 的数组对。
public function slugify(string $value) : string
{
$replaceArray = [
">" => "",
"<" => "",
" " => "-",
"/" => "-",
"ß" => "ss",
"ä" => "ae",
"ö" => "oe",
"ü" => "ue",
];
$value = str_replace(array_keys($replaceArray), $replaceArray, mb_strtolower($value));
return $value;
}