如何通过PHP表单与MySQL/MariaDB实现UTF-8字符替换
PHP表单结合MySQL REGEXP_REPLACE替换UTF-8字符的问题
我希望通过PHP表单结合MySQL/MariaDB的REGEXP_REPLACE函数,将某列中的UTF-8字符替换为其他UTF-8字符。
初始代码
$search = mysqli_real_escape_string($id_mysql, $_POST['search']); $new = mysqli_real_escape_string($id_mysql, $_POST['new']); mysqli_query ($id_mysql, "UPDATE table_name SET column_name = REGEXP_REPLACE(column_name, '$search', '$new') WHERE column_name REGEXP '$search'" ) or die(mysqli_error($id_mysql));
补充说明
- 为便于理解问题,我移除了
mysqli_real_escape_string函数。 - 注意:PHP正则中Unicode字符使用
\x{26A1}格式,而MySQL正则需使用\u{26A1}格式(上述十六进制码仅为示例)。
问题场景
1. 直接赋值时可正常运行
当直接给变量赋值时,代码能正常执行替换:
$search = "\u{264B}"; $new = "\u{264C}";
2. 表单提交时无法正常工作
但通过表单提交\u{264B}或"\u{264B}"作为搜索内容时,替换失效:
$search = $_POST['search']; $new = "\u{264C}";
此时通过$_POST获取的\u{264B}会被PHP识别为普通字符串,而非双引号解析后的Unicode字符。已知PHP只有双引号字符串才会解析Unicode转义序列,但尝试多种方法都无法让POST内容按双引号方式解析,同时我还需要实现更复杂的搜索与替换需求。
内容的提问来源于stack exchange,提问作者Arnaud
相关产品推荐
相关产品推荐

