To solve the optimization problem described, we first need to translate the natural language description into a symbolic representation. This involves defining variables and formulating the objective function and constraints using these variables.

Let's define:
- $x_1$ as the quantity of strips of bacon,
- $x_2$ as the quantity of oranges.

The objective function described is to maximize: 
\[1.28x_1^2 + 3.91x_2^2 + 8.56x_1 + 5.2x_2\]

The constraints are:
1. Fiber content from strips of bacon and oranges must be at least 14 grams: $8x_1 + 3x_2 \geq 14$
2. Four times the number of strips of bacon, plus minus six times the number of oranges must be at least zero: $4x_1 - 6x_2 \geq 0$
3. The total fiber from the square of quantities of strips of bacon and oranges should not exceed 15 grams: $8x_1^2 + 3x_2^2 \leq 15$
4. At most 15 grams of fiber can come from strips of bacon plus oranges: $8x_1 + 3x_2 \leq 15$
5. An integer number of strips of bacon must be used: $x_1 \in \mathbb{Z}$
6. The quantity of oranges can be non-integer: $x_2 \in \mathbb{R}$

The symbolic representation is thus:
```json
{
  'sym_variables': [('x1', 'strips of bacon'), ('x2', 'oranges')],
  'objective_function': '1.28*x1**2 + 3.91*x2**2 + 8.56*x1 + 5.2*x2',
  'constraints': [
    '8*x1 + 3*x2 >= 14',
    '4*x1 - 6*x2 >= 0',
    '8*x1**2 + 3*x2**2 <= 15',
    '8*x1 + 3*x2 <= 15'
  ]
}
```

To implement this in Gurobi, we'll use Python. Note that since $x_1$ must be an integer and $x_2$ can be a real number, we'll define $x_1$ as an integer variable and $x_2$ as a continuous variable.

```python
from gurobipy import *

# Create a model
m = Model("Optimization_Problem")

# Define variables
x1 = m.addVar(vtype=GRB.INTEGER, name="strips_of_bacon")
x2 = m.addVar(vtype=GRB.CONTINUOUS, name="oranges")

# Define the objective function
m.setObjective(1.28*x1**2 + 3.91*x2**2 + 8.56*x1 + 5.2*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(8*x1 + 3*x2 >= 14, name="fiber_minimum")
m.addConstr(4*x1 - 6*x2 >= 0, name="bacon_oranges_ratio")
m.addConstr(8*x1**2 + 3*x2**2 <= 15, name="fiber_squared_maximum")
m.addConstr(8*x1 + 3*x2 <= 15, name="fiber_maximum")

# Optimize the model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Strips of bacon: {x1.x}")
    print(f"Oranges: {x2.x}")
    print(f"Objective function value: {m.objVal}")
else:
    print("No optimal solution found")
```