防止“&”变成&。保存到数据库时的编码

问题描述 投票:0回答:4

我使用 sql server 2008 并且有 PDO 连接

  $con = new \PDO("sqlsrv:Server={$config['server']};Database={$config['database']}", $config['username'], $config['password']);
  $con->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
  $con->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_ASSOC); 

我想要的是,我需要保存包含“&”符号的目录名称而不转换为

&

eg - 目录名称 - “新旧”

当我保存在数据库中时,它转换为“

New & old
”。我想停止这种转换。我如何将其另存为“新旧”

这是数据保存代码-

$stmt = $this->db->prepare( "SET NOCOUNT ON DECLARE @return_value int
        EXEC    @return_value = [dbo].[sp_update_t_Rfile2_RF2_Path]
        @RF2_RfileID_pk_ind = ?, @RF2_Path = ?
        SELECT  'Return Value' = @return_value
        ");
        $return = null;
  $stmt->bindParam(1,$fields['RF2_nd'],\PDO::PARAM_STR );
  $stmt->bindParam(2,$fields['Path_New'],\PDO::PARAM_STR);
  $stmt->execute();

我使用 POST 请求而不是任何 Ajax 调用此代码。当我在此代码之前打印 $fields['Path_New'] 时,它正确返回“新和旧”,在 POST 时不会发生任何编码。

数据库列数据类型是 varchar(265),我使用 PHP 5.3 的 IIS 服务器

我有两个系统在同一个数据库上运行,一个是 Access 系统,另一个是 PHP Web 应用程序。访问系统无法使用

&

请帮助我停止将“&”编码为

&

谢谢

php sql-server-2008 iis pdo sqlsrv
4个回答
2
投票

最后我找到了解决方案,停止保存 & 作为

&
我们需要解码 html 编码(UTF-8)。

(PHP 4 >= 4.3.0,PHP 5)

html_entity_decode
— 将所有 HTML 实体转换为其适用的字符

更多信息 - http://php.net/manual/en/function.html-entity-decode.php

现在我可以保存 & 而无需转换为

&

我更新的代码是 -

@RK_Path = N'".\html_entity_decode($fields['txtRK_Path'])."',

谢谢。


0
投票

您应该在所有页面、php 文件和排序数据库中使用 UTF-8。 还要检查一下: https://stackoverflow.com/a/11249695/1919749


0
投票

将 MYSQL 数据库中的排序规则以及 php 脚本中的编码更改为 UTF-8


0
投票

这可能对你有帮助, 使用方法

mysqli_real_escape_string()
示例如下,

// Sample data with special characters
$data = "& should not be converted to &";

// Escape the special characters before inserting into the database
$escapedData = mysqli_real_escape_string($conn, $data);
© www.soinside.com 2019 - 2024. All rights reserved.